您在代碼結果看到的不一致是由兩個引起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'之外的其他功能)。有很多文章模仿古典風格的子類,如果這就是你想要的,或者你也可以去更簡單的寄生繼承路線。 –