ホームページ >ウェブフロントエンド >jsチュートリアル >js バインド関数はクロージャーを使用して実行 context_javascript のヒントを保存します

js バインド関数はクロージャーを使用して実行 context_javascript のヒントを保存します

WBOY
WBOYオリジナル
2016-05-16 17:57:561078ブラウズ
コードをコピー コードは次のとおりです:

window.name = "ウィンドウ オブジェクト"
functionscopeTest( ) {
return this.name;
}
// グローバル スコープで関数を呼び出します:
scopeTest()
// "ウィンドウ オブジェクト" var foo = {
name: "foo オブジェクト!",
otherScopeTest: function() { return this.name }
};
foo.otherScopeTest();// -> "foo オブジェクト!"
var foo_otherScopeTest = foo.otherScopeTest()
// –> "ウィンドウ オブジェクト"


関数へのオブジェクト 別の変数に値を代入した後も、この関数の実行コンテキストは依然としてこのオブジェクトであるため、bind メソッドを使用する必要があります。
bind の実装は次のとおりです:


// Prototype.js の .bind メソッド
Function.prototype.bind = function(){
var fn = this, args = Array.prototype.slice.call(arguments), object = args。シフト();
return function(){
return fn.apply(object,
args.concat(Array.prototype.slice.call(arguments))); };


使用例:



コードをコピーします
コードは次のとおりです: var obj = { name: '素晴らしいデモ',
fx: function() {
alert(this.name)
}; >window.name = 'とても美しい窓です!';
function runFx(f) {
f();
}
var fx2 = obj.fx.bind(obj);
runFx(obj.fx) ;
runFx(fx2);


参考:
http://www.prototypejs.org/api/function/bind
PS:
Prototypejs を発見しました。API ドキュメントは非常に詳細に説明されているので、時間をかけてぜひ読んでください。
私の簡単な実装:




コードをコピー

コードは次のとおりです: 関数。プロトタイプ .bind = function(obj) { var _this = this; return function() { return _this.apply(obj,
Array.prototype.slice.call(arguments));
}
}
var name = 'window',
foo = {
name:'foo object',
show:function() {
return this.name ;
}
};
console.assert(foo.show()=='foo オブジェクト',
' 期待される foo オブジェクト、実際は ' foo.show()); var foo_show = foo.show;
console.assert(foo_show()=='window',
' 期待されるのは window、実際は ' foo_show()); ( foo);
console.assert(foo_show_bind()=='foo オブジェクト',
' 期待されるのは foo オブジェクトですが、実際は ' foo_show_bind());
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。