プロトタイプと閉鎖は最も一般的で、理解が困難であり、JavaScriptの問題の2つの部分と見なされます。もちろん、彼らはまた、スコープチェーン、継承などの拡張機能を持っています。最近、私はそれらをさまざまな方法で読み、すべてをひっくり返し、自分の経験を記録しました。書くことは常に私の理解を深くします。 (タイトルとは何の関係もないので、私はため息をつきました。私が理解するたびに、私はそれを読んだ後もまだ多くの報酬を得ることができます)
まず、JavaScriptの新しいキーワードについて説明しましょう。通常、それを使用して、クラスのインスタンスオブジェクトを作成します。 JavaScriptでは、オブジェクトをインスタンス化した後、クラスの属性とメソッドを継承します。コードを通してそれを示しましょう
function person(name){this.name = name;} person.age = "23"; person.prototype.say = function(){console.log( "im" + this.name);}; var person = new person( "wang fang"); console.log(person.name、// wang fang person.height // undefined); person.say(); //私はWang Fang Console.log(person.name、// person person.age // 23); person.say(); //person.sayは関数ではありませんこの行を見てみましょう
var person = new Person( "Wang Fang");
新しいことは何をしましたか?以下は、JSエンジンの仕事がしていることです
var obj = {}; obj .__ proto__ = person.prototype; var result = person.call(obj、 "wang fang"); return typeof result === 'obj'?結果:OBJ;1.最初に新しいオブジェクトを作成します
2。OBJの__Proto__をPersonのプロトタイプオブジェクトプロトタイプにポイントし、OBJオブジェクトのプロトタイプチェーンが確立されます:obj-> person.prototype-> object.prototype-> null
3。OBJオブジェクトの実行スペースで人関数を呼び出し、パラメーター「Wang Fang」を渡します。 var result = obj.person( "wang fang")に相当します。この文が実行された後、OBJは属性名を生成し、「Wang Fang」に割り当てます。
4.返品値を決定します。返品値がない場合、または非表示値が返される場合は、OBJを返します。それ以外の場合、返品値は新しいオブジェクトとして返されます(少しひねり、3次演算子、自分でチェックしてください)
要約:
上記の例で述べたように、JavaScriptの新しいキーワードの主な機能は継承ですが、人は機能であり、人はオブジェクトであることを忘れないでください。関数とオブジェクトの違いについては、時間があればもう一度書きます。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。