假设有:
function someConstructor(){
// initialize
}
someConstructor.prop = {test:'test'};
var obj1 = new someConstructor();
var obj2 = new someConstructor();
prop
我的猜测是,通过someConstructor.prop
forobj1
和obj2
someConstructor仍然只有一份可用的副本。
假设有:
function someConstructor(){
// initialize
}
someConstructor.prop = {test:'test'};
var obj1 = new someConstructor();
var obj2 = new someConstructor();
prop
我的猜测是,通过someConstructor.prop
forobj1
和obj2
someConstructor仍然只有一份可用的副本。
原型用于确保所有实例都存在 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" }
function SomeConstructor(){}; someConstructor.prop = …
JavaScript 区分大小写,此示例不起作用。
我的猜测是 obj1 和 obj2 仍然只有一个 prop 副本。
不,根本不会有任何副本。是函数对象的属性,与orprop
无关。它不是由他们继承的。obj1
obj2
这就是在原型上使用属性的区别,原型是继承的obj1
对象obj2
。
直接复制到对象的静态属性
仅当“对象”是指此处的构造函数时。在 JS中,没有 classes,也没有“静态”属性。然而,“静态类属性”对应的是构造函数上的属性。