构造函数的属性会发生什么?

时间:2013-05-30 00:41:16

标签: javascript

假设有:

function someConstructor(){
   // initialize
}
someConstructor.prop = {test:'test'};

var obj1 = new someConstructor();
var obj2 = new someConstructor();

我的猜测是prop只有someConstructor.prop只有obj1可用,obj2和{{1}}可通过someConstructor获得。

2 个答案:

答案 0 :(得分:4)

Prototype用于确保所有实例都有1个且只有1个对象。但是,这些实例可能会使用自己的对象覆盖该原型。至少在Firefox中,设置Test.opts不允许o1o2继承它。但是设置Test.prototype.opts会。

尝试以下方法:

var Test = function () {};
Test.opts = {helo: "hello"};

var o1 = new Test();
var o2 = new Test();
console.log( o1.opts ); // undefined
o1.opts = {helo: "bye"};
console.log( o2.opts ); // undefined

Test.prototype.opts = {helo: "hello"};
console.log( o1.opts ); // Object { helo: "bye" }
console.log( o2.opts ); // Object { helo: "hello" }

答案 1 :(得分:0)

function SomeConstructor(){}; someConstructor.prop = …

JavaScript区分大小写,这个示例不起作用。

  

我的猜测是,obj1和obj2仍然只有一个道具副本。

没有。根本不会有任何副本。 prop是函数对象的属性,与obj1obj2无关。它不是由它们继承的。

这就是在原型上使用属性的不同之处,原型是obj1obj2继承的对象。

  

直接复制到对象的静态属性

只有在“对象”中你指的是构造函数。在JS中,there are no classes,没有“静态”属性。然而,“静态类属性”的通信者将是构造函数的属性。