假设有:
function someConstructor(){
// initialize
}
someConstructor.prop = {test:'test'};
var obj1 = new someConstructor();
var obj2 = new someConstructor();
我的猜测是prop
只有someConstructor.prop
只有obj1
可用,obj2
和{{1}}可通过someConstructor获得。
答案 0 :(得分:4)
Prototype用于确保所有实例都有1个且只有1个对象。但是,这些实例可能会使用自己的对象覆盖该原型。至少在Firefox中,设置Test.opts
不允许o1
或o2
继承它。但是设置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
是函数对象的属性,与obj1
或obj2
无关。它不是由它们继承的。
这就是在原型上使用属性的不同之处,原型是obj1
和obj2
继承的对象。
直接复制到对象的静态属性
只有在“对象”中你指的是构造函数。在JS中,there are no classes,没有“静态”属性。然而,“静态类属性”的通信者将是构造函数的属性。