您在代码结果看到的不一致是由两个引起reasons.first的一切,如果你检查儿童原型对象与Object.getPrototypeOf(Child)
你function Empty(){}
,所以纠正原型对象分配,你应该使用Child.__proto__ = new Parent()
,而不是Child.prototype = new Parent();
。第二的其所有的事情原型链。如果你看到Object.getPrototypeOf(Child)
新的赋值后的结果,你得到[object Object]
(万一你没有定义父原型toString()方法。如果你有,然后它返回父子原型)原型toString()方法),这意味着儿童具有对象在其原型属性。然后你有三个选择:
1.assign一个toString()方法,以儿童对象本身:
Child.toString = function(){ return this.name }
在这种情况下,你不应该因为经过原型分配它的构造已更改为使用this.constructor.name
父母。
2.define儿童原型(父)toString()方法:
Child.__proto__.toString = function(){ return this.name }
3.define儿童原型的>原型(对象)toString()方法:(倍率)
Parent.prototype.toString = function(){ return this.name }
一些意见:我用__proto__
的屁股
1.原因在开始的时候,我想要访问对象构造函数的原始原型属性并改变它。
2.I've使用return this.name
因为这些方法会从儿童被调用,因此它refrences子对象。我在选项2和prototype
在选项3使用__proto__
3,原因是我们使用__proto__
当对象构造发生了变化,prototype
当对象的构造并没有改变。
4.to测试toString()
方法你应该使用alert(Child)
而不是alert(new Child())
。
下面是一篇文章,可以帮助你很多关于原型:
http://yehudakatz.com/2011/08/12/understanding-prototypes-in-javascript/
这个答案的所有方面都与Chrome浏览器JS控制台进行测试。
从https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/constructor,'constructor':_Returns对创建实例的prototype_的Object函数的引用。所以它正在做它应该做的事情,你正在寻找替代功能(除了'constructor'之外的其他功能)。有很多文章模仿古典风格的子类,如果这就是你想要的,或者你也可以去更简单的寄生继承路线。 –