新人にとって、JavaScriptのプロトタイプは非常に厄介なものです。第一に、プロトタイプは__Proto__と混同しやすく、第二に、それらの間のさまざまな方向は非常に複雑です。実際、それを明確にしようとしている市場にはすでに多くの記事があります。さまざまな線が描かれたいわゆる古典的な画像があり、これとそのラインをつなぐものがあります。正直に言うと、私はそれを完全に理解することは言うまでもなく、とてもめまいがします。また、プロトタイプの重要な知識ポイントを分離し、最も単純なチャート形式で明確に説明できるかどうかを確認するために、自分で試してみたいと思います。
プロトタイプは、他のオブジェクトが属性継承を実装できるオブジェクトであることを知っています。しかし、プロトタイプに加えて、別の__proto__が使用されていますか?彼らがとても似ているように見える場合、人々はそれをどのように区別できますか?彼らは誰を指していますか?カオスをどうやって覚えていますか?プロトタイプチェーンとは何ですか?私は、何らかの経験を持っている多くの初心者さえそれを完全に説明できないかもしれないと信じています。以下は、3つの簡単な写真と理解するためのいくつかの例コードです。
1。プロトタイプと__Proto__の違い
var a = {}; console.log(a.prototype); //undefinedConsole.log(a.__proto__); // object {} var b = function(){} console.log(b.prototype); // b {} console.log(b .__ proto__); //関数() {} /*1。リテラル方法*/var a = {}; console.log(a .__ proto__); // object {} console.log(a .__ proto__ === a.constructor.prototype); // true/*2。コンストラクターメソッド*/var a = function(){}; var a = new a(); console.log(a .__ proto__); // a {} console.log(a .__ proto__ === a.constructor.prototype); // true/*3。 object.create()method*/var a1 = {a:1} var a2 = object.create(a1); console.log(a2 .__ proto__); // object {a:1} console.log(a .__ proto__ === a.constructor.prototype); // false(これは図1の例外です) var a = function(){}; var a = new a(); console.log(a .__ proto__); // a {}(すなわち、コンストラクター関数aのプロトタイプオブジェクトa)console.log(a .__ proto __.__ proto__); // object {}(つまり、コンストラクター関数オブジェクトのプロトタイプオブジェクト)console.log(a .__ proto __.__ proto __.__ proto__); // null上記はこの記事に関するすべてです。この記事では、3つの写真を使用して、JavaScriptのプロトタイプオブジェクトとプロトタイプチェーンを説明しています。 JavaScriptを学ぶとき、誰にとっても役立つことを願っています。