JavaScriptのプロトタイプ継承
6163 ワード
tl;dr: Understanding Prototypal inheritance, uses & specifics. Composed with code, console & explanatory approach.
Problems are understood crystal clear if seen from a right perspective.
同じ軸上で動く:JavaScriptの継承概念の生物学的展望を考慮する.マイクを父親にしよう👨 ジョーは息子である👦. 生物学として、ジョーは彼の父、マイクの知られていないいくつかの“プロパティ”または“イメージ”を継承します.このイメージまたは「プロパティ」または親オブジェクトから子オブジェクトまで受け継がれる元のコピーのバージョンは、「原型の継承」を意味します....
JavaScriptはプロトタイプのベース言語であり、オブジェクトのプロトタイプを継承することができます.JavaScriptはオブジェクトとしての要素です.ネイティブのJSオブジェクトは、プロパティの独自の作り付けのバッグであり、プロパティのこれらの袋は、別のオブジェクトによって継承することができます.例えば、
console.log(Array.prototype); //brings all basic properties and methods associated with an Array Object and appends it to Array.prototype.
JSインタビューにおける原型継承関連用語の定義
プロトタイプの継承は、オブジェクトとメソッドを1つのオブジェクトから別のオブジェクトに共有、拡張、コピーできます.
プロトタイプチェーンはオブジェクトのプロパティのルックアップメカニズムです.オブジェクトのプロパティにアクセスすると、JavaScriptは最初にオブジェクトを検索します.プロパティが見つからない場合、それが見つかるまで(またはそれにもかかわらず)、プロトチェーンまでずっと上昇します.
コンストラクタ関数を作成し、プロトタイプが存在するかどうかを確認します.
コンストラクター関数を作成するたびに、プロトタイプと呼ばれるプロパティオブジェクトが自動的に作成され、関数オブジェクト(コンストラクター)に接続されます.
注意:この新しいプロトタイプオブジェクトはまた、ネイティブのJavaScriptオブジェクトを指す、または内部のプライベートリンクを持っています.
以下の例では、コンストラクタ関数を作成します.
function Mike () {
this.name = 'Mike';
this.skill = 'JavaScript';
}
//Mike inherits an Object prototype. The "prototype" gets created with function Mike declaration, automatically.
Mike.hasOwnProperty('prototype');
console.log(Mike.prototype);
//paste above code on console.
The hasOwnProperty() method returns a boolean indicating whether the object has the specified property as its own property (as opposed to inheriting it)~ MDN
2 .関数プロトタイプへのプロパティーの追加.
次の構文は、プロパティとメソッドを関数プロトタイプに割り当てる方法を定義します
Syntax: function_name.prototype.property_name = property_value;
Mike.prototype.putName = function () {
return 'My name is ' + this.name;
}
console.log(Mike.prototype); //putName method added to Mike prototype
ここでは、プロトタイプメソッドとして作成されたputNameメソッドは、以前のコンソール出力と比較してみてください.任意の違い?親から子へのプロパティの継承.
プロパティを継承するための親オブジェクトのインスタンスを作るために“new”キーワードを追加します.
例えば、
var Joe = new Mike();
console.log(Joe); //Son(joe) inherits father prototypal properties
舞台裏で、あなたが呼ぶとき:
var Joe = new Mike();
JavaScriptは実際に以下の操作を行います.var Joe = new Object();
Joe.[[Prototype]] = Mike.prototype;
Mike.call(Joe);
ブラウザはどのプロパティをどのオブジェクトに属しているのでしょうか?ブラウザは最初に子オブジェクトのプロパティ(すなわち、自分自身のインスタンスプロパティ)をチェックしていない場合は、継承されたプロトタイプのプロパティを検索し、見つからなかった場合は、オブジェクトのprotoを横切って1つのレベルを継承します.
しかし、protoは何ですか?
包包包は、物体を原型に結びつける内部的性質である.
In layman terms, proto acts as a wormhole that references properties from one Object to another Object, during prototypal chain lookup mechanism.
例えば、
Conside the Prototypal chain built using above code:
// Joe ---> Mike ---> Object.prototype ---> null
なぜ我々はプロトタイプの継承(PI)が必要ですか?
PIは応用に役立つDRY オブジェクトインスタンスの原理.また、親オブジェクトから子オブジェクトへのプロパティプールを内部的に転送するのに役立ちます.したがって、機能分担パターンへの傾き.
...
プロトタイプの継承を扱っている間、いくつかのハウツーを知っています
プロトタイプの継承は、私の最初の>記事だった.任意の変更や建設的なフィードバックは非常に歓迎されています.❤️
Reference
この問題について(JavaScriptのプロトタイプ継承), 我々は、より多くの情報をここで見つけました https://dev.to/thevinayysharma/prototypal-inheritance-in-javascript-5ghfテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol