新しいキーワードの間ではJavaScriptといえば非常に興味深い歴史を持っています。実際には、JavaScriptの作成者ブレンダン・アイクは高い人気を得るためには、新たな達成、ジャワの残留出力を学ぶことを余儀なくされ、彼は、Java JavaScriptの弟になりたかったです。多くの人々は、JavaScriptはクラスベースの継承のように、単に表面上、実際のプロトタイプ継承をカバーするように設計されていると思います。
この誤解は、多くの伝統的なJava開発者が十分にJavaScriptを理解されていないことができます。実際に、私たちは何かを最後にフロントエンドエンジニア、新しいキーワードを理解する必要があります。
- ステップ1:最初に新しいコンストラクタ(の実装として機能する空のオブジェクト)を作成した後、オブジェクトのインスタンスを返します
- STEP2:上記で作成した空のオブジェクトのプロトタイプ(
__proto__
)、点コンストラクタプロトタイププロパティ - STEP3:オブジェクトがこのコンストラクタの空の内部に割り当てられ、コンストラクタは、ロジックを実行します
- STEP4:実行論理コンストラクタまたはコンストラクタはステップ明示的な戻り値で作成されたオブジェクトを返します
JavaScriptは新しいキーワードであるため、我々は直接予想される使用をシミュレートするnewFuncを達成カバーされていないことができます。
関数者(名){ this.name =名 } constの人=新しいnewFunc(人'ルーカス') はconsole.log(人) // {名: "ルーカス"}
実装:
newfunc関数(引数...){ //第1のパラメータargs配列、すなわち標的コンストラクタ取る CONST = args.shiftコンストラクタ() //、空のオブジェクトを作成し、属性の継承プロトタイプヌルオブジェクトのコンストラクタを //即ち.__ proto__ === constructor.prototype OBJの達成 CONSTをOBJ = Object.create(constructor.prototype) コンストラクタが実行され、//は、その結果得られたコンストラクタは返し 我々がobjのコンストラクタのこの時点まで、適用使用することに注意してください// constructor.apply結果=一定(OBJ、引数) //コンストラクタの実行した場合、結果は、そうでないオブジェクトobjオブジェクトタイプ、直接リターンで リターン(typeof演算結果===「オブジェクト」 &&結果!= nullの)? 結果:OBJ }
コードは、いくつかの重要なポイント複雑ではありません。
- OBJ Object.createの使用 ポイントのプロトタイプのコンストラクタ
__proto__
- 使用適用の方法、これがobjのコンストラクタに送られます
- newFuncリターンは、三項演算子を使用して決定したときに結果を返します
私たちは、コンストラクタは明示的な戻り値を持ち、オブジェクト型の値を返す場合、コンストラクタは結果はもはや特定のインスタンスで返さない、ということを知っています。次のコード:
関数者(名){ this.name =名前の リターン{1:1} } constの人=新しい人(人'ルーカス') はconsole.log(人) // {1:1}
newFuncはもはや困難な実装を理解するために、これらのポイントを理解して注意、。