0

假设有:

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

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

prop我的猜测是,通过someConstructor.propforobj1obj2someConstructor仍然只有一份可用的副本。

4

2 回答 2

4

原型用于确保所有实例都存在 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" }
于 2013-05-30T00:50:50.483 回答
0
function SomeConstructor(){}; someConstructor.prop = …

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

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

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

这就是在原型上使用属性的区别,原型是继承的obj1对象obj2

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

仅当“对象”是指此处的构造函数时。在 JS中,没有 classes,也没有“静态”属性。然而,“静态类属性”对应的是构造函数上的属性。

于 2013-05-30T00:53:32.083 回答