動的プロトタイプメソッドを使用して継承メカニズムを表示できないことについての考え_JavaScript スキル

WBOY
リリース: 2016-05-16 18:40:29
オリジナル
1201 人が閲覧しました
コードをコピー コードは次のとおりです。






これを最初に考えるのは奇妙でしたコード、なぜ実行できないのですか?そこで、著者の説明に基づいて考え始めました (このコードの背後にある著者の説明は非常に複雑で、何回も読まないと何を言っているのか理解できません)、そして最終的にそれを理解しました。
var anObject = new aFunction() の形式でオブジェクトを作成するプロセスは、実際には 3 つのステップに分割できることはすでにわかっています:
(1) 新しいオブジェクトを作成します
(2) オブジェクトを変換しますオブジェクトの組み込みプロトタイプオブジェクト コンストラクタ portotype
が参照するプロトタイプオブジェクトとして設定 (3) this パラメータとしてコンストラクタを呼び出し、メンバ設定などの初期化作業を完了します

の手順 ( 2)




コードをコピーします

コードは次のとおりです: var oTriangle1 = new Triangle(12,4);
この文が実行されると、内部で oTriangle1.prototype = Triangle.prototype; が実行されます (もちろん、Triangle.prototype オブジェクト自体には(この時点での実際のプロパティとメソッド))、その後 (3)) のステップまで実行を継続し、関数本体を実行し、初めて関数本体を



コードをコピーします


コードは次のとおりです。
Triangle.prototype = new Polygon(); しかし、この文が実行されると、oTriangle1.prototype に値を割り当てることができなくなります (つまり、oTriangle1.prototype = Triangle を実行できません) .prototype;)、プログラムは


コードをコピー


コードは次のとおりです:
Triangle.prototype .getArea = function() { return this.base * this. hei * 0.5; }; しかし、この時点では遅すぎます。oTriangle1.prototype オブジェクトは、このメソッドを所有する唯一のオブジェクトです。先ほど new Polygon() によって作成されたので、プログラムの最後のコメント行の結果が表示されます。ただし、次に作成される Triangle オブジェクトは正常に実行できます。以下のコードを見てください:
コード



コードをコピー


コードは次のとおりです:





理由については、現時点で私が分析したものです。 oTriangle2.prototype=Triangle.prototype;プロトタイプ オブジェクトには、実際のプロパティとメソッドを含むオブジェクト参照が割り当てられます。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート