要約する1. 類似点
2. 違い
call() メソッド
/* 通常モード */ obj = { 合計(a, b) { console.log(これ) a + bを返す } } // sum 関数の apply メソッドと bind メソッドを実行します。出力される内容は以下のようになります。obj.sum.call() // ウィンドウを印刷 obj.sum.call(undefined, 1, 2) // 印刷ウィンドウ obj.sum.call(null, 1, 2) // 印刷ウィンドウ /* 厳密モード */ 「厳密な使用」 // sum関数のapplyメソッドとbindメソッドを実行し、以下のように出力します。obj.sum.call() // undefinedを出力します。 obj.sum.call(undefined, 1, 2) // undefined と表示される obj.sum.call(null, 1, 2) // null を出力します シミュレーションの実装1. 要点
2. call()、apply()、bind() メソッドのシミュレーション実装において、最初のパラメータが渡されない場合や undefined または null が渡された場合、ここでは JS 通常モードと厳密モードで統一された処理が行われ、つまり、対象関数内の this は window オブジェクトを指します。 3. コードは次のとおりです Function.prototype.myCall = function (コンテキスト、...引数) { コンテキスト === 未定義 || コンテキスト === null の場合 { コンテキスト = ウィンドウ } // 次の行はコアコードです context.fn = this const 結果 = context.fn(...args) コンテキストを削除する.fn 結果を返す } obj1 = { 基本数: 1, 合計(a, b) { console.log(これ) this.basicNum + a + b を返す } } obj2 = { 基本数: 9 } コンソールログ(obj1.sum.call(obj2, 2, 3)) // 14 コンソールログ(obj1.sum.myCall(obj2, 2, 3)) // 14 apply() メソッドapply() メソッドを呼び出すと、ターゲット関数が直ちに実行され、関数内の this の参照が変更されます。これはメソッドの最初のパラメータを指します。2 番目のパラメータはパラメータ配列または引数オブジェクトです。各配列要素または引数オブジェクトによって表される各パラメータは、ターゲット関数のパラメータとして 1 つずつ渡されます。 シミュレーションの実装1.要点
2. コードは次のとおりです Function.prototype.myApply = 関数 (コンテキスト、引数) { コンテキスト === 未定義 || コンテキスト === null の場合 { コンテキスト = ウィンドウ } // 次の行はコアコードです context.fn = this const 結果 = context.fn(...args) コンテキストを削除する.fn 結果を返す } コンソール.log(obj1.sum.apply(obj2, [2, 3])) // 14 コンソール.log(obj1.sum.myApply(obj2, [2, 3])) // 14 bind() メソッド
シミュレーションの実装1. 要点
2. コードは次のとおりです Function.prototype.myBind = function (context, ...initArgs) { コンテキスト === 未定義 || コンテキスト === null の場合 { コンテキスト = ウィンドウ } // この値をキャッシュする const _this = this 関数を返す (...引数) { // 次の行はコアコードです context.fn = _this const 結果 = context.fn(...initArgs, ...args) コンテキストを削除する.fn 結果を返す } } コンソール.log(obj1.sum.bind(obj2, 2)(3)) // 14 コンソール.log(obj1.sum.myBind(obj2, 2)(3)) // 14 関連する知識ポイント
JavaScript 関数呼び出し、適用、およびバインド メソッドの詳細なケース分析に関するこの記事はこれで終わりです。JavaScript 関数呼び出し、適用、およびバインド メソッドに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Nginx の realip モジュールの使い方の基礎学習
Grafana をインストールします。公式 Web サイトでは、直接インストールできる Ubuntu...
目次概要CommonJS 仕様Node の CommonJS 仕様の実装モジュールのエクスポートとイ...
多方向探索ツリー完全二分木の高さ: O(log2N)、ここで2は対数完全なM方向探索木の高さ: O(...
前のこれは古くからある古典的な質問です。以前読者から質問があったので、ここでお答えします。簡単な例か...
導入フロントエンドプロジェクトの開発プロセスでは、el-table によって表示される結果列がコンポ...
この記事では、MySQL 8.0.15 winx64 圧縮パッケージのインストールと設定方法を参考ま...
目次序文原因分析と解決策スケジュールされたタスクを迅速に実行する要約する序文データベースのスケジュー...
1. 動的パラメータ2.6.0 以降では、角括弧で囲まれた JavaScript 式をディレクティブ...
[LeetCode] 196.重複したメールを削除するSQL クエリを記述して、Person とい...
この記事の例では、Appleの電卓を実装するためのJSの具体的なコードを参考までに共有しています。具...
Dreamweaver8 を使用して独自の Web サイトを作成する目的は何ですか?インターネットに...
文法:背景画像: 円錐グラデーション(位置の角度から、開始色、...、最後の色)最初のパラメータ:開...
Google の Flutter の目標は、どのプラットフォームを使用していても、ネイティブの速度...
Vue3.0 がリリースされてからしばらく経ちましたが、勉強を始める必要があります。まず、達成したい...
MySql インデックスインデックスの利点1. 一意のインデックスまたは主キー インデックスを作成す...