コンストラクタnew を導入する前に、コンストラクターとは何かを知っておく必要があります。 コンストラクタと通常の関数の書き方には違いはありません。関数が new Fun() を通じて呼び出される場合、それはコンストラクタと呼ばれ、コンストラクタの最初の文字は通常大文字になります。 関数 User(名前) { this.name = 名前; } u = new User('leo'); とします。 ここで、User はコンストラクタです。もちろん、User() を直接呼び出すこともできますが、これではインスタンスは作成されません。非厳密モードでは、name 属性がウィンドウにハングします。 新しいオペレーターでは、インスタンスを作成するために new 演算子は具体的に何を行うのでしょうか? new 演算子は、ユーザー定義のオブジェクト タイプのインスタンス、またはコンストラクターを持つ組み込みオブジェクトのインスタンスを作成します。新しいキーワードは次の操作を実行します。 1. 空の単純な JavaScript オブジェクト (つまり **{}**) を作成します。 2. オブジェクトを別のオブジェクトにリンクします(つまり、オブジェクトのコンストラクターを設定します)。 3. 手順 1 で新しく作成したオブジェクトを **this** のコンテキストとして使用します。 4. 関数がオブジェクトを返さない場合は、**this** を返します。 上記は新しいオペレータ - MDN から引用したものです おそらく手順 2 と 4 がよく理解されていないと思うので、ここでもう一度要約します。 1. 空のオブジェクトを作成する u = {} 2. プロトタイプをバインド、u.__proto__ = User.prototype 3. User() 関数を呼び出し、空のオブジェクト u を this として渡します。つまり、User.call(u) です。 4. User() 関数が実行後にオブジェクト型を返す場合はこの変数を返し、そうでない場合はこれを返します。注: コンストラクタが基本型の値を返す場合は影響を受けず、これを返します。 自分で新しいものを実装するnew 演算子の原理を理解した上で、FakeNew 関数を自分で実装してみましょう。 関数FakeNew() { obj = {} とします。 // 配列のような引数を配列に変換し、コンストラクターである最初のパラメーターをシフトアウトします。letconstructor = [].shift.apply(arguments); // プロトタイプをバインドします obj.__proto__ =constructor.prototype; // コンストラクターを呼び出して、obj を次のように渡します。let res = Constructor.apply(obj, arguments); // 戻り値 return typeof res === 'object' ? res : obj; } 関数 User(名前) { this.name = 名前; } User.prototype.getName = 関数() { this.name を返します。 } u = FakeNew(User, 'leo') とします。 コンソールにログ出力します。 コンソールにログ出力します。 対応するキーステップのコメントがコードに添付されているので、新しい操作を実装しました。今後新しいものを見ると、より明確な感覚が得られると思います。 以上がJavaScriptのnew演算子を自分で実装する方法の詳細です。JavaScriptのnew演算子の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: keepalived+nginx の高可用性を実装する方法の例
>>: MySQL 5.7.21 のインストールとパスワード設定のチュートリアル
フロントエンド開発者が必ず知っておくべきケースとして、タブバーの切り替え効果があります。タブバー自体...
導入同社の最近の Vue フロントエンド プロジェクトの要件: ポップアップ ウィンドウのドラッグ、...
目次MySQL ベースの検索エンジンの実装1. ngram全文パーサー2. 全文インデックスを作成す...
目次序文1. マルチレベルのデータとイベントの配信には$attrsと$listenersを使用する2...
これまでに CSS の基本的なセレクターをいくつか学習しましたが、今日は CSS の複雑なセレクター...
1. Web ページをデザインするときに、幅を決定するのは非常に面倒な作業です。 jb51.net ...
LinuxリモートMySQLデータベースの展開、参考までに、具体的な内容は次のとおりです。 1.0 ...
最近、ウェブサイトを設計するときにこの問題に遭遇しています。メンバーセンターを設計し、コンテンツを ...
この記事は、4G メモリ システム用の MySQL 構成ファイル ソリューションです (主に Inn...
ドクター紹介: Docker はコンテナ関連の技術です。簡単に言うと、さまざまなソフトウェアを実行で...
1. 文書化ルール1. 大文字と小文字が区別されます。 2. 属性値は引用符(一重引用符または二重引...
1. ダウンロード参考: 2. D:\MySQL\mysql-5.7.24 などの固定の場所に解凍し...
dokekrでmysqlコンテナを起動するコマンドを使用します: docker run -p 330...
2つの小さな問題ですが、長い間私を悩ませていました。最初の質問テキストエリアの左側のテキストは常にテ...
/****************** * カーネルデバッグ技術 ****************...