要約する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 モジュールの使い方の基礎学習
一般的な提案は、WHERE 条件のインデックスを作成することですが、これは実際には一方的です。インデ...
仕事上の理由により、完全なオンライン化(つまり、すべてのデータがオンラインで完了し、インポートや...
この記事の例では、ページング効果表示を実現するためのミニプログラムの具体的なコードを参考までに共有し...
背景記事を始める前に、賽博朋克とは何か、賽博朋克2077とは何かを簡単に理解しましょう。サイバーパン...
遅延読み込みを使用しない 'vue' から Vue をインポートします。 '...
IE 8 以降では互換モードが追加され、これを有効にすると IE の下位バージョンでレンダリングされ...
問題の説明最近、仕事中に問題が発生しました。MySQL が起動に失敗しました。エラー ログは次のとお...
この記事では、シンプルなショッピングカートを実装するためのJavaScriptの具体的なコードを参考...
1. ワニスの概要1. ワニスの紹介Varnish は、新しいソフトウェア アーキテクチャを使用し、...
目次1. レシピ集1.1 プロジェクトの背景1.2 テクノロジースタック1.3 開発環境1.4. プ...
MySQL ログイン パスワードを忘れた場合、解決方法は実はとても簡単です。MySQL メイン構成フ...
目次まず多次元配列の平坦化についてお話しましょう方法 1: flat()方法 2: 空の文字列を連結...
目次1. ポーテナーの紹介2. Portainer アーキテクチャの概要3. Portainerのイ...
WordPress のマルチサイト機能を使用すると、1 つの WordPress プログラムをインス...
MySQL InnoDB 監視 (システム層、データベース層) MySQL の監視に関しては、My...