プロトタイプとプロトタイプ チェーンの関係は JavaScript
のオブジェクトを介して実行され、JavaScript
のすべてはオブジェクトであるため、プロトタイプとプロトタイプチェーンの方が重要 JavaScript の概念、今日は JavaScript
のプロトタイプとプロトタイプ チェーンを見ていきます。
#1. 概念を理解する (これら 2 つの名詞を知っておくだけ)
)プロトタイプ<em></em>)
proto__<em>)</em>
prototype => 函数的一个属性 : 同时也是一个 对象{} (称之为原型对象亦可)
__proto__ => 对象Object的一个属性 : 同时也是一个 对象{} (__proto__也就是[[Prototype]])
a. コンストラクターを宣言します
function Test() { }
//prototype 是函数的一个属性
console.dir(Test);
console.log(Test.prototype);
// Test.prototype也是一个对象
console.log(typeof Test.prototype);
b. オブジェクトを宣言します
const test = new Test(); console.log(test); //验证test为一个对象 console.log(typeof test); //__proto__是对象的一个属性 console.log(test.__proto__); console.log(Test.prototype); //对象的__proto__属性存储着Test.prototype console.log(test.__proto__ === Test.prototype); // test.__proto__也是一个对象 console.log(typeof test.__proto__);
function Test() {} console.log(Test.prototype); //验证函数是否有prototype属性 let test = new Test(); console.dir(test.__proto__); //验证对象是否有__proto__属性 console.log(test.__proto__ === Test.prototype);//验证对象的__ptoto__是否保存着该对象的构造函数的prototype console.log(Test.prototype.__proto__ === Object.prototype);//Test.prototype(是一个对象)的__proto__属性是否是对象的原型属性 console.log(Object.prototype.__proto__);//原型链的顶层没有__proto__属性 null
## function Test(){}
let test =new Test();
test.a= 10;
//test.__proto__ === test.constructor.prototype
test.__proto__.b1=11;//对象的__proto__属性存储着对象构造函数的prototype属性
Test.prototype.b2=11;
test.__proto__.__proto__.c1=12;
Object.prototype.c2=12;
console.log(test);
console.log(Test.prototype);
console.log(Object.prototype.__proto__);
/*逐层解析
* test{
* a = 10
* __proto__:Test.prototype{
* b = 11
* __proto__:Object.prototype{
* c = 12
* X__prototype__:null
* }
* }
* }
*
* */
##__proto__
は、
__proto__<span style="color: rgb(0, 0, 0);"></span> をプロトタイプ ノードとして取得すると単純に要約できます。プロトタイプチェーン。
<span style="color: rgb(0, 0, 0);"></span>すべてのインスタンス オブジェクト (
__proto__<span style="color: rgb(0, 0, 0);"> </span> と呼ばれる) があります。コンストラクターのプロトタイプ オブジェクト (
prototype<span style="color: rgb(0, 0, 0);"></span>) を指します。プロトタイプ オブジェクトには、独自のプロトタイプ オブジェクト (
__proto__<span style="color: rgb(0, 0, 0);"></span>) もあり、オブジェクトのプロトタイプ オブジェクトが
null<span style="color: rgb(0, 0, 0);"></span> になるまで階層化されます。定義上、
null<span style="color: rgb(0, 0, 0);"></span> にはプロトタイプがなく、このプロトタイプ チェーンの最後のリンクとして機能します。
<span style="color: rgb(0, 0, 0);"></span>
シンボルは <span style="color: rgb(0, 0, 0);">someObject を指すために使用されます</span>
,someObject.[[Prototype]]<span style="color: rgb(0, 0, 0);"></span>
=== <span style="color: rgb(0, 0, 0);"></span>__proto__
## のプロトタイプ#(JavaScript の非標準プロパティですが、多くのブラウザーで実装されています)。 <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 0);"></span>#Object.prototype
Object<span style="color: rgb(0, 0, 0);"># のプロトタイプを表します。 ## 物体。 </span>
コンストラクターによって作成されたインスタンス オブジェクトの <span style="color: rgb(0, 0, 0);">[[Prototype]]</span>
は
<span style="color: rgb(0, 0, 0);">プロトタイプ</span>
属性。 <span style="color: rgb(0, 0, 0);"></span># おすすめ動画:
「JavaScript 入門_翡翠少女般若心経シリーズ」、<span style="color: rgb(0, 0, 0);">「独具九品 (6)_jQuery ビデオチュートリアル」</span>
以上がJavaScript の壊れたスレッド、プロトタイプ、プロトタイプ チェーンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。