function def() {
console.log(this.x)
}
var f = def.bind({ x:777 })
f() // prints 777
The bind
创建一个函数f
这与def
,除了在f
, this
被设定为{ x:777 }
.
是否可以访问该对象f
被绑定到外部f
? E.g., console.log(f.this.x)
(但这不起作用)。或者后面的代码不可能看到什么对象f
被绑定到?
我找到了一些有用的信息bind
here:
http://dmitrysoshnikov.com/notes/note-1-ecmascript-bound-functions/
bind
ECMAScript 5 中指定的生成一种轻量级函数(在某些方面与普通函数不同,如上面的链接所述)。基本上,它提供了一个用于调用目标函数的包装器,并维护内部属性,其中包括目标函数、边界this
,以及绑定参数。由于这些是内部属性,因此无法按照OP询问的方式访问它们(您不能采用任意绑定函数f
并做类似的事情f.getBoundThis()
).
值得注意的是,bind 在捕获某些状态方面并不是唯一的。闭包也捕获状态。然而,bind
(如 ECMAScript 5 中指定)是not闭包,因为闭包捕获变量,而绑定捕获值。
这是一个例子:
(function () {
var x = 2;
function thisSquared() { return this * this; }
f = thisSquared.bind(x);
g = function() { return x * x; } // g is a closure
console.log(f()); // Squares the captured value (2), prints 4
console.log(g()); // Squares x, prints 4
x = 3;
})();
console.log(f()); // Squares the captured value (still 2), prints 4
console.log(g()); // Squares x, prints 9
之前的一些实现bind
(在 ECMAScript 5 之前用 JavaScript 编写)与闭包没有这种区别。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)