[英]javascript prototype object
1。
function MyConstructor() {}
var myobject = new MyConstructor();
MyConstructor.prototype = {protest:"maizere"};
[ myobject instanceof MyConstructor, // false !
myobject.constructor == MyConstructor, // true !
myobject instanceof Object ] // true
console.log(myobject.protest) //undefined
这证明myobject不再继承MyConstructor原型的属性和方法。
但是请参见下面的下一个代码:
2。
function MyConstructor() {}
var myobject = new MyConstructor();
MyConstructor.prototype.protest= "Maizere";//Do this line gets hoisted?or something else
[ myobject instanceof MyConstructor, // true!
myobject.constructor == MyConstructor, // true !
myobject instanceof Object ] // true
console.log(myobject.protest) //Maizere
为什么会发生这种情况?内部原型的确切定义是什么?即使在实例化对象后, proto仍在引用MyConstructor原型,这也证明了事实;如果这样,为什么first(1。)代码未引用MyConstructor原型呢? 由于该属性是在第二个代码中的对象实例化之后添加的,并且该对象的内部原型已接收到该属性,因此这意味着我们可以稍后更改原型属性,并仍然在实例中看到效果。但是相同的定义不起作用在第一个代码中替换原型属性时?
我对此可能是错的,但是当您这样做时:
MyConstructor.prototype = {protest:"maizere"};
您正在使用匿名对象定义覆盖原型,因此,当您仅添加新属性时,例如:
MyConstructor.prototype.protest= {"Maizere"};
您的课程保留其原型,并且像一个魅力一样工作。
MyConstructor.prototype =
覆盖整个prototype
对象。
instanceof
运算符测试对象在其原型链中是否具有构造函数的prototype属性
http://jsfiddle.net/ExplosionPIlls/xtqhp/
function MyConstructor () {}
MyConstructor.prototype = {'xyz': 'zyx'};
//true
console.log((new MyConstructor) instanceof MyConstructor);
function MyConstructor2 () {}
var mc2 = new MyConstructor2;
MyConstructor2.prototype = {'xyz': 'zyx'};
//false
console.log(mc2 instanceof MyConstructor2);
顺便说一句, MyConstructor.prototype.protest = {"Maizere"};
是无效的语法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.