ホームページ  >  記事  >  ウェブフロントエンド  >  Javascriptの関数バインドメソッドの使い方を詳しく解説

Javascriptの関数バインドメソッドの使い方を詳しく解説

伊谢尔伦
伊谢尔伦オリジナル
2017-07-20 14:11:463232ブラウズ

Function.prototype.bind()

bind メソッドは、関数内 (実行されるスコープ) の this ポインターを指定し、新しい関数を返します。バインド メソッドは関数をすぐには実行しません。


var keith = {
 a: 1,
 count: function() {
 console.log(this.a++);
 }
 };
 keith.count(); //1
 keith.count(); //2
 keith.count(); //3

上記のコードで、this.aがkeithオブジェクト内のaプロパティを指しており、このメソッドが別の変数に代入されている場合、呼び出し時にエラーが発生します。


 var keith = {
 a: 1,
 count: function() {
 console.log(this.a++);
 }
 };
 var f = keith.count;
 f(); //NaN

上記のコードで、count メソッドが f 変数に割り当てられている場合、this オブジェクトは keith オブジェクトを指すのではなく、window オブジェクトを指すようになります。そして、window.a は、インクリメント操作の後、デフォルトで unfine に等しくなります。

この問題を解決するには、bind メソッドを使用して keith オブジェクト内の this を keith オブジェクトにバインドするか、直接呼び出すことができます。


 var f = keith.count.bind(keith);
 f(); //1
 f(); //2
 f(); //3
 keith.count.bind(keith)() //1
 keith.count.bind(keith)() //2
 keith.count.bind(keith)() //3

もちろん、これを他のオブジェクトにバインドすることもできます。


 var obj = {
 a: 100
 };
 var f = keith.count.bind(obj);
 f(); //100
 f(); //101
 f(); //102

同様に、最初のパラメータが null または未定義である場合、または this の場合、2 番目のパラメータはグローバル環境を指します。 call、パラメータの受け渡し形式はcallメソッドと同じです。


 function keith(a, b) {
 return a + b;
 }
 console.log(keith.apply(null,[1,4])); //5
 console.log(keith.call(null,1,4)); //5
 console.log(keith.bind(null, 1, 4)); //keith()
 console.log(keith.bind(null, 1, 4)()); //5

上記のコードでは、call、apply、bind の違いがわかります。 call メソッドと apply メソッドは、呼び出された直後に実行されます。バインド呼び出しの後は、元の関数に戻り、再度呼び出す必要があります。これはクロージャに似ています

以上がJavascriptの関数バインドメソッドの使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。