ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript_javascript のヒントでバインド メソッドのアプリケーションを正しく参照する

JavaScript_javascript のヒントでバインド メソッドのアプリケーションを正しく参照する

WBOY
WBOYオリジナル
2016-05-16 15:59:551297ブラウズ

JavaScript では、メソッドにコンテキストが含まれることが多いため、最も一般的な console.log("info...") を例として挙げます。長いコンソールの記述は避け、ログを直接使用してください。 ( "info...") とすると、次の構文が自動的に考えられます:

 var log = console.log;
 log("info…");

申し訳ありませんが、実行中にエラーが発生しました: TypeError: 不正な呼び出しです。

なぜですか? console.log("info...") の場合、log メソッドは console オブジェクトで呼び出されるため、log メソッドの this は console オブジェクトを指し、log 変数を使用して console.log メソッドを指します。そして、log メソッドを直接呼び出します。このとき、log メソッドは window オブジェクトを指しています。コンテキストが矛盾している場合は、当然エラーが報告されます。

この時点で、bind メソッドを使用してこの問題を解決できます。バインド メソッドを使用すると、現在のメソッドのコンテキストとして this を手動で渡し、コンテキストを保持するメソッドを返すことができます。たとえば、次のようになります。

 var log = console.log.bind(console);
 log("info...");

この方法ではエラーは発生しません。

ただし、bind メソッドは IE 8 以前のブラウザをサポートしていません。非常に簡単に自分で実装できます。

 Function.prototype.bind = Function.prototype.bind || function(context){
   var _this = this;
   
   return function(){
     _this.apply(context, arguments);
   };
 };

コアは、クロージャの古典的なアプリケーションである apply メソッドを通じて実装されます。 _this は現在のメソッドを指し、context は現在のメソッドのコンテキストを指します。どちらもクロージャを介してアクセスされます。

以上がこの記事の全内容です。皆さんに気に入っていただければ幸いです。

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