コード結果に表示される不整合は、2つの理由によって引き起こされます。まず、子プロトタイプオブジェクトをチェックすると、Object.getPrototypeOf(Child)
が得られるため、プロトタイプオブジェクトの割り当てを修正するには、プロトタイプチェーンの問題の.secondの代わりにfunction Empty(){}
使用する必要があります。新しい割り当て後の結果が表示された場合は、次のようになります(親プロトタイプtoString()メソッドを定義していない場合。定義している場合は、Parent(子プロトタイプ)プロトタイプtoString()メソッドを返します)。これは、子を意味します。プロトタイプ属性にオブジェクトがあります。次に、3つの選択肢があります。Child.__proto__ = new Parent()
Child.prototype = new Parent();
Object.getPrototypeOf(Child)
[object Object]
1. toString()メソッドを子オブジェクト自体に割り当てます。
Child.toString = function(){ return this.name }
この場合、プロトタイプの割り当て後にコンストラクターがParentthis.constructor.name
に変更されたため、使用しないでください。
2.子prototype(Parent)toString()メソッドを定義します。
Child.__proto__.toString = function(){ return this.name }
3.子prototype->prototype(Object)toString()メソッドを定義します:(オーバーライド)
Parent.prototype.toString = function(){ return this.name }
いくつかの観察:
1.最初に割り当てに使用した理由__proto__
は、オブジェクトのコンストラクター関数の元のプロトタイププロパティにアクセスして変更したかったためです。
2.これらのメソッドはChildから呼び出されるため、使用return this.name
しました。そのため、ChildObjectを参照します。
3.オプション2とオプション3で使用__proto__
した理由は、Objectコンストラクターが変更された場合と、Objectコンストラクターが変更されていない場合に使用するためです。prototype
__proto__
prototype
4.メソッドをテストするには、代わりにtoString()
使用する必要があります。alert(Child)
alert(new Child())
これは、プロトタイプについて多くのことを助ける記事です:
http://yehudakatz.com/2011/08/12/understanding-prototypes-in-javascript/
この回答のすべての側面は、ChromeJSコンソールでテストされています。