如何创建具有未分配属性的Javascript构造函数/原型?

如何创建具有未分配属性的Javascript构造函数/原型?,javascript,class,object,constructor,prototype,Javascript,Class,Object,Constructor,Prototype,我是从面向对象编程的角度来看这个问题的,并试图用Javascript来理解“类”。我希望能够创建一个具有属性的类,但不必立即为它们赋值。如下所示: var MyObject = function(id) { this.id = id; // Create the property so it is present on all instances but don't require it to be assigned to right away. this.friendI

我是从面向对象编程的角度来看这个问题的,并试图用Javascript来理解“类”。我希望能够创建一个具有属性的类,但不必立即为它们赋值。如下所示:

var MyObject = function(id) {
    this.id = id;
    // Create the property so it is present on all instances but don't require it to be assigned to right away.
    this.friendId;
}

MyObject.prototype = {
    constructor: MyObject

    // Etc...
}

有没有办法做到这一点,或者我只是不了解它在Javascript中的工作原理?

只需在声明中省略属性:

function MyObject(id) 
{
    this.id = id;
}

var obj = new MyObject(123);
console.log(obj.friendId); // undefined

或者,在构造函数中将其显式设置为
null

只需从声明中省略属性:

function MyObject(id) 
{
    this.id = id;
}

var obj = new MyObject(123);
console.log(obj.friendId); // undefined

或者,在构造函数中将其显式设置为
null

只需从声明中省略属性:

function MyObject(id) 
{
    this.id = id;
}

var obj = new MyObject(123);
console.log(obj.friendId); // undefined

或者,在构造函数中将其显式设置为
null

只需从声明中省略属性:

function MyObject(id) 
{
    this.id = id;
}

var obj = new MyObject(123);
console.log(obj.friendId); // undefined

或者,在构造函数中将其显式设置为
null

这篇Mozilla开发者网络文章是一篇很好的阅读材料。 它比较了基于类的语言和基于原型的语言,并以Java和JavaScript提供了并排的代码示例

从文章中引用

构造函数或原型指定一组初始属性。可以向单个对象或整个对象集动态添加或删除特性


这篇Mozilla开发者网络文章读起来很好。 它比较了基于类的语言和基于原型的语言,并以Java和JavaScript提供了并排的代码示例

从文章中引用

构造函数或原型指定一组初始属性。可以向单个对象或整个对象集动态添加或删除特性


这篇Mozilla开发者网络文章读起来很好。 它比较了基于类的语言和基于原型的语言,并以Java和JavaScript提供了并排的代码示例

从文章中引用

构造函数或原型指定一组初始属性。可以向单个对象或整个对象集动态添加或删除特性


这篇Mozilla开发者网络文章读起来很好。 它比较了基于类的语言和基于原型的语言,并以Java和JavaScript提供了并排的代码示例

从文章中引用

构造函数或原型指定一组初始属性。可以向单个对象或整个对象集动态添加或删除特性



this.friendId=null
JavaScript实际上没有“类”。试图让它表现得像那样是一种挫败自己的好方法。@Peter-很酷,谢谢。为什么你需要它“存在”而不是假装它无处不在并在你需要时分配它(鸭子打字)?一个没有价值的财产有什么意义?由于javascript是松散类型的,所以在准备分配值之前,创建属性没有多大意义。顺便说一句,Peter的评论确实指定了一个值,即空值,因此它所做的正是您明显不想做的事情。:-)
this.friendId=null
JavaScript实际上没有“类”。试图让它表现得像那样是一种挫败自己的好方法。@Peter-很酷,谢谢。为什么你需要它“存在”而不是假装它无处不在并在你需要时分配它(鸭子打字)?一个没有价值的财产有什么意义?由于javascript是松散类型的,所以在准备分配值之前,创建属性没有多大意义。顺便说一句,Peter的评论确实指定了一个值,即空值,因此它所做的正是您明显不想做的事情。:-)
this.friendId=null
JavaScript实际上没有“类”。试图让它表现得像那样是一种挫败自己的好方法。@Peter-很酷,谢谢。为什么你需要它“存在”而不是假装它无处不在并在你需要时分配它(鸭子打字)?一个没有价值的财产有什么意义?由于javascript是松散类型的,所以在准备分配值之前,创建属性没有多大意义。顺便说一句,Peter的评论确实指定了一个值,即空值,因此它所做的正是您明显不想做的事情。:-)
this.friendId=null
JavaScript实际上没有“类”。试图让它表现得像那样是一种挫败自己的好方法。@Peter-很酷,谢谢。为什么你需要它“存在”而不是假装它无处不在并在你需要时分配它(鸭子打字)?一个没有价值的财产有什么意义?由于javascript是松散类型的,所以在准备分配值之前,创建属性没有多大意义。顺便说一句,Peter的评论确实指定了一个值,即空值,因此它所做的正是您明显不想做的事情。:-)在那个文档中,它有初始化“空”属性的构造函数的示例,也就是说,没有给它们分配实际值,这是我试图完成的。在那个文档中,它有初始化“空”属性的构造函数的示例,也就是说,没有给它们分配实际值,这是我试图完成的。在那个文档中,它有初始化“空”属性的构造函数的例子,也就是说,没有给它们分配实际值,这就是我试图实现的。在那个文档中,它有初始化“空”属性的构造函数的例子,也就是说,没有给它们分配实际值,这就是我试图实现的。