JavaScriptでどのように正しく引用するか(bind方法の応用)
2026 ワード
JavaScriptでは、方法はしばしば文脈、つまりthisに関連しているので、直接に引用することはできません.最も一般的なconsolie.logs(info...)では、長いconsolieを書くことを避け、直接にlogs(info...)を使って代用します.
なぜですか?consolie.log(info...)の場合、log方法はconsolineオブジェクト上で呼び出されるので、logメソッドのthisはconsolineオブジェクトを指す.私達はlog変数を使ってconsolone.logメソッドを指して、直接logメソッドを呼び出します.この時、logメソッドのthisはwindowオブジェクトを指しています.文脈が一致しないので、当然間違えます.
私たちはこの問題をビッド法で解決できます.bind方法は、現在の方法のコンテキストとして、手動でthisに入ることを可能にし、その後、コンテキストを持つ方法、例えば、
しかし、bindメソッドは、e 8およびより低いバージョンのブラウザをサポートしていません.私たちは完全に自分で一つを実現することができます.とても簡単です.
1 var log = console.log;
2 log("info…");
残念ですが、運行情報が間違っています.TypeErr:Illal invocationです.なぜですか?consolie.log(info...)の場合、log方法はconsolineオブジェクト上で呼び出されるので、logメソッドのthisはconsolineオブジェクトを指す.私達はlog変数を使ってconsolone.logメソッドを指して、直接logメソッドを呼び出します.この時、logメソッドのthisはwindowオブジェクトを指しています.文脈が一致しないので、当然間違えます.
私たちはこの問題をビッド法で解決できます.bind方法は、現在の方法のコンテキストとして、手動でthisに入ることを可能にし、その後、コンテキストを持つ方法、例えば、
1 var log = console.log.bind(console);
2 log("info...");
これで間違いないと思います.しかし、bindメソッドは、e 8およびより低いバージョンのブラウザをサポートしていません.私たちは完全に自分で一つを実現することができます.とても簡単です.
1 Function.prototype.bind = Function.prototype.bind || function(context){
2 var _this = this;
3
4 return function(){
5 _this.apply(context, arguments);
6 };
7 };
コアはappy法によって実現され、クローズドの古典的応用である.thisは現在の方法を指して、contextは現在の方法の文脈を指して、両方とも閉込めを通じて訪問します.