javascript中构造函数创建的原型对象属性
在JavaScript中,如果我创建一个构造函数Foo,那么一个原型 对象也将被创建为Foo.prototype。所以我试了一下:javascript中构造函数创建的原型对象属性,javascript,prototype,Javascript,Prototype,在JavaScript中,如果我创建一个构造函数Foo,那么一个原型 对象也将被创建为Foo.prototype。所以我试了一下: function Foo() { this.xx = 1000} console.log(Foo.prototype.xx); 我认为创建的原型对象Foo.prototype将具有 属性xx=1000。所以我试了一下: function Foo() { this.xx = 1000} console.log(Foo.prototype.xx); 但结果是“未
function Foo() { this.xx = 1000}
console.log(Foo.prototype.xx);
我认为创建的原型对象Foo.prototype将具有
属性xx=1000。所以我试了一下:
function Foo() { this.xx = 1000}
console.log(Foo.prototype.xx);
但结果是“未定义的”。为什么会这样
不应该有一个具有单个属性xx的Foo.prototype对象吗
1000岁
谢谢。如果在构造函数中添加属性,则每个实例都有自己的副本:
函数Foo1(){
这是0.xx=[1000];
}
var foo1=新的foo1(),
foo2=新的Foo1();
foo1.hasOwnProperty('xx');//真的
foo2.hasOwnProperty('xx');//真的
foo1.xx==foo2.xx;//false(每个实例都有不同的副本)
您还可以使用原型继承。然后,在所有实例之间共享相同继承属性的实例:
函数Foo2(){}
var foo1=新的Foo2(),
foo2=新的foo2();
foo1中的“xx”;//假的
foo2中的“xx”;//假的
Foo2.prototype.xx=[1000];
foo1中的“xx”;//真的
foo2中的“xx”;//真的
foo1.hasOwnProperty('xx');//false(它是继承的)
foo2.hasOwnProperty('xx');//false(它是继承的)
foo1.xx==foo2.xx;//true(所有实例共享相同的值)
此.xx
指的是实例对象,而不是它的原型…无论您在构造函数中做什么,在调用构造函数之前都不会对其进行计算。没有new Foo()
,任何地方都不会有xx
。也许下面的答案可以帮助你:谢谢oriol的快速回答。所以我猜属性xx将始终是实例化对象中的属性(指向的对象,而不是Foo.prototype中的“共享”),Foo.prototype将始终为空开始?@完全是的。嗯,Foo.prototype
将包含一个值为Foo
的不可枚举的构造函数
属性,并且还将继承自对象.prototype
。