当构造新对象时,该对象被设置为委托(delegate)任何尚未显式设置为其构造函数原型(prototype)的属性。这意味着我们可以稍后更改原型(prototype),并且仍然可以看到实例中的更改。
首先:
function Foo(){}
foo=new Foo();
Foo.prototype={};
foo.constructor==Foo//true.why is this happening since construtor prototype is empty object
所以声明没有按照定义工作。对还是错? 但如果我这样做,结果就会不同
第二个:
function Foo(){}
Foo.prototype={};
foo=new Foo();
foo.constructor==Foo//false as aspected
再一次 第三:
function Foo(){}
Foo.prototype={};
Foo.prototype.name="Maizere";
foo=new Foo();
foo.name==Maizere//true.The definition at the top is applying here,if so why the definition not working in the first: example
请帮助简单的英语。我真的很头疼。
最佳答案
why is this happening
new
operator将实例的继承设置为构造函数的 prototype
属性当前指向的对象。所以当你这样做的时候
function Foo() {}
var foo = new Foo;
如果有人在那之后分配给 Foo.prototype
是无关紧要的 - 它不会改变 foo
。
- 首先:您获得的继承
constructor
属性来自“旧”原型(prototype)——一个与函数一起初始化并具有隐藏“constructor”属性的对象 - 第二:您正在用一个空对象覆盖
prototype
属性,并且您的foo
(在覆盖后创建)继承自该属性。由于空对象继承自Object.prototype
,constructor
属性现在指向Object
函数。 - 第三:同样,您在覆盖
原型(prototype)
之后创建了foo
。由于您将name
属性分配给foo
继承自的新对象,因此您也可以在foo
上访问它。
关于javascript:原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14549857/