Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中构造函数创建的原型对象属性_Javascript_Prototype - Fatal编程技术网

javascript中构造函数创建的原型对象属性

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); 但结果是“未

在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);
但结果是“未定义的”。为什么会这样

不应该有一个具有单个属性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