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这证明了我的对象不再继承MyConstructor原型的属性和方法。
但请参阅下面的代码:
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 prototype.If,而不是第一个(1)。没有引用MyConstructor原型的代码?由于属性是在第二段代码中的对象实例化之后添加的,并且对象的内部原型接收到了该属性,这意味着我们可以在稍后更改原型属性,并且仍然可以在实例.But中看到相同的定义在替换第一个代码中的原型属性时不起作用?
发布于 2013-01-31 03:48:21
我可能错了,但当你这么做的时候:
MyConstructor.prototype = {protest:"maizere"};您正在使用匿名对象定义重写原型,因此,当您添加一个新属性时,如下所示:
MyConstructor.prototype.protest= {"Maizere"};你的班级保持它的原型,它的工作就像一个魅力。
发布于 2013-01-31 03:48:56
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"};不是有效的语法。
发布于 2013-01-31 03:50:01
因此,这是我将这篇文章标有书签的原因之一:
构造函数被认为有点混乱
基本上,在第一个代码块中发生的是用一个新对象覆盖MyConstructor的原型对象。然而,在第二个块中,您要向现有prototype对象添加一个属性。
https://stackoverflow.com/questions/14618046
复制相似问题