序文プロトタイプとプロトタイプ チェーンに関する知識は、常に面接の焦点となってきました。それほど難しいことではありませんが、完全に理解するには、ある程度の努力が必要です。あなたの興味をそそる面接の質問を見てみましょう。 関数 User() {} User.prototype.sayHello = 関数() {} var u1 = 新しいユーザー(); var u2 = 新しいユーザー(); コンソールにログ出力します。 console.log(User.prototype.constructor); console.log(User.prototype === Function.prototype); console.log(User.__proto__ === Function.prototype); console.log(User.__proto__ === Function.__proto__); コンソールにログ出力します。(u1.__proto__ === u2.__proto__); console.log(u1.__proto__ === User.__proto__); console.log(Function.__proto__ === Object.__proto__); console.log(Function.prototype.__proto__ === Object.prototype.__proto__); console.log(Function.prototype.__proto__ === Object.prototype); 基礎を築くすべての JavaScript オブジェクトは、基本的に new 関数を通じて作成されます。これには、オブジェクト リテラルの形式で定義されたオブジェクト (new Object() の構文糖衣に相当) も含まれます。 オブジェクト、配列などを含むすべての関数は、基本的に新しい関数を通じて作成されます。 すべての関数はオブジェクトです。 プロトタイプ各関数には、プロトタイプであるプロパティ prototype があります。デフォルトでは、これは通常の Object オブジェクトであり、コンストラクターを呼び出すことによって作成されたインスタンスのプロトタイプです。 コンストラクタのプロパティJavaScriptには、プロトタイプからコンストラクタを指すプロパティもあります。コンストラクタ、つまりFunc.prototype.constructor --> Func __プロト__JavaScript のすべてのオブジェクト (null を除く) には、オブジェクトのプロトタイプを指す __proto__ プロパティがあります。 関数 User() {} var u1 = 新しいユーザー(); // u1.__proto__ -> User.prototype console.log(u1.__proto__ === User.prototype) // true 明らかに、インスタンスの __proto__ プロパティはコンストラクターのプロトタイプを指しているので、複数のインスタンスの __proto__ は同じプロトタイプを指すのでしょうか? var u2 = 新しいユーザー(); console.log(u1.__proto__ === u2.__proto__) // 真 複数のインスタンスの __proto__ がすべてコンストラクターのプロトタイプを指している場合、インスタンスが特定の方法でプロトタイプのメソッド、プロパティなどにアクセスできると、プロトタイプでプログラミングして継承の効果を実現できます。 プロトタイプとプロトタイプ チェーンの関係図を更新し続けましょう。 プロトタイプチェーンインスタンス オブジェクトが属性を探しているときに、見つからない場合は、__proto__ に従って、オブジェクトに関連付けられたプロトタイプを検索します。それでも見つからない場合は、最上位レベルが見つかるまで、プロトタイプのプロトタイプを検索します。これがプロトタイプ チェーンの概念です。 インタビューの質問を使用したプロトタイプ チェーンの例をいくつか見てみましょう。 例
改善する上記を学んだ後、ほとんどの面接の質問に答えることができます。例えば、次のようなものです。 関数A() {} 関数B(a) { これは、 } 関数C(a) { もし(a){ これは、 } } プロトタイプa = 1; B.プロトタイプ.a = 1; C.プロトタイプ.a = 1; コンソール.log(新しいA().a); //1 console.log(新しい B().a); //未定義 コンソール.log(新しいC(2).a); //2 しかし、Function.__proto__ === Object.__proto__、Function.prototype.__proto__ === Object.prototype.__proto__ など、記事の元の面接の質問を解決するにはまだ何かが欠けています。 1 つずつ取り組んでみましょう。 Object.__proto__、Object.prototype、Object.prototype.__proto__
// 要約: Object.__proto__ --> Function.prototype Object.prototype.__proto__ --> null Function.__proto__、Function.prototype、Function.prototype.__proto__
実践により、Object.__proto__ --> Function.prototype のみが存在することが証明されます。 一生懸命考えましたが、何も思いつきません。Function は岩の間から飛び出してきた猿なのでしょうか?そこで、ランダムにテストをいくつか実行したところ、予想外に手がかりが見つかりました。 上記から、次の結論が導き出せます: Function.__proto__ --> Function.prototype
要約する最後に、プロトタイプとプロトタイプ チェーンに関する知識を図にまとめます。
あとがき知識の海は、想像以上に広大であることがよくあります。私はプロトタイプとプロトタイプ チェーンを何度も研究してきましたが、より包括的かつ完全に理解できたと思います。しかし、この面接の質問に遭遇した後、私が学んできたことは単なる一分野に過ぎず、JS には発掘されるのを待っている深い宝物が本当にたくさんあることに気づきました。学びに終わりはありません。お互いに励まし合いましょう。 最後に、自信を高めるための簡単な面接の質問をご紹介します。 var F = 関数 () {} Object.prototype.a = 関数 () {} Function.prototype.b = 関数 () {} var f = 新しい F(); コンソールにログ出力します。 // プロトタイプチェーン // f.__proto__ --> F.prototype --> Object.prototype // F.__proto__ --> Function.prototype --> Object.prototype JavaScript プロトタイプとプロトタイプ チェーンに関するこの記事はこれで終わりです。JavaScript プロトタイプとプロトタイプ チェーンに関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: CSS 標準: vertical-align プロパティ
>>: Docker デプロイメント Consul 構成プロセスの分析
序文CSS で水平方向と垂直方向に中央揃えする方法はたくさんあります。この記事で紹介する方法は非常に...
1. nginx-1.8.1.tar.gzを解凍する2. fastdfs-nginx-module-...
1. <select style="width:195px" name=&...
MySQL 8.0.16 にインストールする場合、「UTF8B3」ではなく「UTF8B4」が使用さ...
1. リバースプロキシの例1 1. 効果を達成する(1)ブラウザを開き、www.123.comと入力...
目次1. スクリプトを使用してDockerのTLSを暗号化する2. Dockerの設定を変更してリモ...
初めて書きます。自己紹介させてください...みなさんこんにちは。私はジャスミンです。なぜジャスミンと...
CSS インポート方法 - インラインスタイルタグ属性を通じて、CSSのキーと値のペアがタグに直接書...
文字列を動的に連結する場合、文字連結を使用することが多いです。次のような連結の引用符の意味がわかりま...
目次1. コンストラクタとインスタンス2. プロパティプロトタイプ3. プロパティ __proto_...
目次概要0. JavaScriptとWeb開発の基礎1. Vueの基本概念Vue コア機能コンポーネ...
導入HTML は、Web ドキュメントのコンテンツのコンテキスト構造と意味を提供します。HTML 自...
ref 定義:要素またはサブコンポーネントの参照情報を登録するために使用されます。参照情報は、親コン...
MySQL の漢字ソートの詳細な説明デフォルトでは、MySQL は日付、時刻、および英語の文字列の並...
1. PRIMARY KEY(主キーインデックス)を追加するmysql>ALTER TABLE...