これを最初に考えるのは奇妙でしたコード、なぜ実行できないのですか?そこで、著者の説明に基づいて考え始めました (このコードの背後にある著者の説明は非常に複雑で、何回も読まないと何を言っているのか理解できません)、そして最終的にそれを理解しました。
var anObject = new aFunction() の形式でオブジェクトを作成するプロセスは、実際には 3 つのステップに分割できることはすでにわかっています:
(1) 新しいオブジェクトを作成します
(2) オブジェクトを変換しますオブジェクトの組み込みプロトタイプオブジェクト コンストラクタ portotype
が参照するプロトタイプオブジェクトとして設定 (3) this パラメータとしてコンストラクタを呼び出し、メンバ設定などの初期化作業を完了します
の手順 ( 2)
コードをコピーします
この文が実行されると、内部で oTriangle1.prototype = Triangle.prototype; が実行されます (もちろん、Triangle.prototype オブジェクト自体には(この時点での実際のプロパティとメソッド))、その後 (3)) のステップまで実行を継続し、関数本体を実行し、初めて関数本体を
コードをコピーします
コードは次のとおりです。
コードをコピー
コードは次のとおりです:
Triangle.prototype .getArea = function() { return this.base * this. hei * 0.5; }; しかし、この時点では遅すぎます。oTriangle1.prototype オブジェクトは、このメソッドを所有する唯一のオブジェクトです。先ほど new Polygon() によって作成されたので、プログラムの最後のコメント行の結果が表示されます。ただし、次に作成される Triangle オブジェクトは正常に実行できます。以下のコードを見てください:
コード
コードをコピー
コードは次のとおりです:
理由については、現時点で私が分析したものです。 oTriangle2.prototype=Triangle.prototype;プロトタイプ オブジェクトには、実際のプロパティとメソッドを含むオブジェクト参照が割り当てられます。