要約する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 モジュールの使い方の基礎学習
チャレンジ:文字列内の文字 &、<、>、" (二重引用符)、および &...
序文ウェブサイトのアクセス元をカウントしたい場合は、PHP を使用して情報を取得してデータベースに記...
最近、私はデザインには階層感覚が必要だと言っています。この階層感覚には、色の重ね合わせや要素の重ね合...
Apache.POI の HSSFWorkbook を使用して Excel にエクスポートします。具...
皆様の参考と操作を容易にするために、様々な主要ウェブサイトを検索し、関連するスケジュールされたタスク...
Flexの基本概念フレックス レイアウト (フレックスはフレキシブル ボックスの略)、エラスティック...
まとめこの記事では、次の一般的なレイアウトを紹介します。 3 列レイアウトを実装する方法は多数ありま...
アリアルArial は、多くの Microsoft アプリケーションとともに配布されるサンセリフ T...
MySQLはOracleのようなシーケンスを実装しているOracle は通常、主キー フィールドを処...
IE 8 以降では互換モードが追加され、これを有効にすると IE の下位バージョンでレンダリングされ...
Vue2 の記述スタイルから Vue3 の形式に切り替えると、記述スタイルとコード構造にいくつかの変...
Unicode は、世界中のすべてのテキストと記号に対応できる国際組織によって開発された文字エンコー...
序文:デジタル加算ボタンと減算ボタンの実装には、次のような多くのソリューションがこれまでに使用されて...
MySQL でデータやテーブルを削除するのは非常に簡単ですが、削除するとすべてのデータが消えてしまう...
目次1. グローバルガード1.1 グローバルフロントガード1.2 グローバルポストルートガード1.3...