对象属性和对象原型

时间:2012-01-28 22:45:06

标签: javascript

EDITED

做法有何不同:

var a = function(){};
a.myProperty = function(){};

对战:

var a = function(){};
a.prototype.myProperty = function(){};

我意识到这可能是一个愚蠢或模糊的问题,但我需要了解什么才能知道两者之间的差异以及何时使用另一个?

2 个答案:

答案 0 :(得分:0)

没有区别。您在对象上设置属性。

请注意,您的第二个示例失败了,因为您没有将a.prototype设置为某个值。

当然,如果你使a成为一个函数,那么它默认会获得一个prototype属性。

.prototype属性具有特殊属性。如果您调用new someFunction,则返回值的[[Prototype]]someFunction.prototype

仅当.prototype是函数的属性时才适用。由于new仅适用于函数。

答案 1 :(得分:0)

请注意,该问题自首次提出以来一直经过大量编辑,这就是为什么现有的评论和答案毫无意义。

所有功能都有原型。附加到这些原型的方法可用于通过将函数作为构造函数调用而创建的对象实例。因此,在第二个示例中,如果您编写var o = new a();,那么您将能够调用o.myProperty();

此外,所有函数都是对象,因此您可以直接在函数本身上设置任意属性,如第一个示例所示。您还可以使用o.constructor(或成员函数中的this.constructor)从对象访问该函数。这可以用来实现C ++静态类变量的等价物。