ホームページ  >  記事  >  ウェブフロントエンド  >  JS プロトタイプ オブジェクトとプロトタイプ チェーンの分析の概要 (コード付き)

JS プロトタイプ オブジェクトとプロトタイプ チェーンの分析の概要 (コード付き)

不言
不言オリジナル
2018-08-15 15:51:521517ブラウズ

この記事では、JS プロトタイプとプロトタイプ チェーンの知識について説明します (コード付き)。必要な方は参考にしていただければ幸いです。

最初にコンストラクターを宣言します

function People(name,age){
        this.name = name;
        this.age = age;
    }

コンストラクターのプロトタイプオブジェクトにクラスメソッドを記述します。サブクラスは親クラスのコンストラクターを呼び出してメソッドを継承できなくなります(プロパティは引き続き継承できます)

// 给People的原型添加方法
People.prototype.speak = function(){
        console.log("我是"+this.name);
    }
// 创建子类继承People
function Man(name,age,huzi){
        People.call(this,name,age);
        this.huzi = huzi;
    }

(人間と人間の両方の属性とメソッドを出力して表示するために呼び出すことはできますが、テスト コードはコード内に表示されません)

この時点で、Man に People のメソッドを継承させるにはどうすればよいですか?

Man.prototype = People.prototype;
    Man.prototype.smoke = function(){
        console.log("抽烟");
    }

ただし、これは正しくありません。サブクラスのプロトタイプを親クラスのプロトタイプに追加すると、2 つのコンストラクターがプロトタイプを共有し、親クラスのメソッドとサブクラスのオブジェクトにアクセスできるようになります。正しい状況では、サブクラスがアクセスできるはずです。メソッド

js オブジェクトのプロトタイプもオブジェクトであるため、オブジェクトのメソッドにアクセスする場合、js プロトタイプもプロトタイプを持ちます。オブジェクト内に存在する場合は、直接アクセスします。存在しない場合は、オブジェクトのプロトタイプ内で検索します。プロトタイプのプロトタイプがない場合は、オブジェクトの場所が見つかるまでオンラインで検索を続けます。このクラスのオブジェクトのプロトタイプは、js とは異なります。プロトタイプで構成されるチェーン構造をjsプロトタイプチェーンと呼びます

サブクラスが親クラスのメソッドを継承したい場合は、サブクラスのコンストラクターのプロトタイプオブジェクトのプロトタイプ(__proto__)を、そのプロトタイプに設定する必要があります。親クラスのコンストラクター

以上です Write:

Man.prototype.__proto__ = People.prototype;

このように書いても大丈夫ですが、公式の書き方の方が標準的です(これが正しいです)

// Object.create用于指定原型创建一个对象(空对象)
    Man.prototype = Object.create(People.prototype);
    Man.prototype.smoke = function(){
        console.log("抽烟");
    }

サブクラスが親クラスを継承する場合、拡張するだけでなく、新しいメソッドの場合、親クラスを書き換えることもできます 既存のメソッドの場合、サブクラス オブジェクトを使用してオーバーライドされたメソッドを呼び出すと、サブクラス独自のメソッドが実行されます

Man.prototype.speak = function(){
        console.log("我是男性");
    }

関連する推奨事項:

JS コア シリーズ: についての簡単な説明プロトタイプオブジェクトとプロトタイプチェーン

js

のスコープチェーン、プロトタイプチェーン、プロトタイプ継承 jsプロトタイプとプロトタイプチェーンの詳しい説明

JavaScriptオブジェクト指向を学ぶ JavaScriptプロトタイプとプロトタイプチェーン_javascriptスキルを理解する

以上がJS プロトタイプ オブジェクトとプロトタイプ チェーンの分析の概要 (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。