Javascript将其绑定到对象外部的函数
我读过关于bind被用来访问对象外部的函数内部的Javascript将其绑定到对象外部的函数,javascript,object,call,bind,apply,Javascript,Object,Call,Bind,Apply,我读过关于bind被用来访问对象外部的函数内部的这个,但由于某些原因,我无法做到这一点 function test (len){ return this.length - len; } var SETTINGS = { length : 21, trimmed: test.bind(this,5), x: function(){ return this.length; } }; SETTINGS.x(); // this is av
这个
,但由于某些原因,我无法做到这一点
function test (len){
return this.length - len;
}
var SETTINGS = {
length : 21,
trimmed: test.bind(this,5),
x: function(){
return this.length;
}
};
SETTINGS.x(); // this is available.
SETTINGS.trimmed(); //len is 5 but this is Window.
这可能与我对bind的理解有关。发生这种情况是因为在绑定
时,此
指向窗口
对象。这有点棘手,但在JS中,仅仅因为这
在对象中,它不会自动成为对象。它更像是:此
指向窗口,除非应用了某些规则
你可能会问什么规则?来自一个惊人的系列丛书:
确定这一点
现在,我们可以总结从函数中确定这一点的规则
调用的调用站点,按优先级顺序排列。用英语问这些问题
此命令,并在应用第一条规则时停止
是否使用new
(new binding)调用函数?如果是的话,这就是问题所在
新构造的对象
var bar=new foo()
使用调用
或应用
(显式绑定)调用的函数是否为偶数
隐藏在绑定硬绑定中?如果是这样的话,这就是问题所在
指定的对象
var bar=foo.call(obj2)
是使用上下文(隐式绑定)调用的函数,否则
称为拥有或包含对象?如果是,这就是背景
反对
var bar=obj1.foo()
-这就是为什么SETTINGS.x()代码>工作顺便说一句
否则,默认值为this(默认绑定)。如果处于严格模式,则选择
未定义,否则拾取全局对象
var bar=foo()
-您的案例
在您的情况下,默认规则适用。
请注意ES6,因为它们会自动绑定此
(就像绑定
)。在定义设置时
对象此
指向窗口