Javascript JS绑定对象函数调用自身
我用一个函数创建了一个对象,该函数使用'this'关键字引用自身的属性 如果我正常地叫它,它工作得很好。但如果我在forEach函数中调用pass作为参数,除非我将它绑定到自身,否则它不会工作 有更优雅的解决方案吗 以下是一个例子:Javascript JS绑定对象函数调用自身,javascript,Javascript,我用一个函数创建了一个对象,该函数使用'this'关键字引用自身的属性 如果我正常地叫它,它工作得很好。但如果我在forEach函数中调用pass作为参数,除非我将它绑定到自身,否则它不会工作 有更优雅的解决方案吗 以下是一个例子: var foobar = { foo : function (number) { this.bar(); }, bar : function () { return "string" } }; fo
var foobar = {
foo : function (number) {
this.bar();
},
bar : function () {
return "string"
}
};
foobar.foo(0);
[1,2,3].forEach(foobar.foo); //won't work
[1,2,3].forEach(foobar.foo.bind(foobar)); //works
小提琴:
有更优雅的解决方案吗
我认为没有比这更优雅的解决方案了
为什么会这样
这是由于上下文中的更改而发生的
此forEach(foobar.foo)
不会使This
引用foobar的实例
另一方面,调用bind
方法,显式地设置this
将指向的位置
这将指向foobar的实例
从:
bind()函数使用
函数体(ECMAScript 5术语中的内部调用属性)与
正在调用它的函数(绑定函数的目标
函数)将此值绑定到bind()的第一个参数,
无法覆盖的。bind()也接受前导默认值
定义绑定函数时提供给目标函数的参数
打电话。也可以使用新的
运算符:这样做的行为就好像目标函数已被替换一样
构建。在前置时,将忽略提供的此值
参数提供给模拟函数
有更优雅的解决方案吗
我认为没有比这更优雅的解决方案了
为什么会这样
这是由于上下文中的更改而发生的
此forEach(foobar.foo)
不会使This
引用foobar的实例
另一方面,调用bind
方法,显式地设置this
将指向的位置
这将指向foobar的实例
从:
bind()函数使用
函数体(ECMAScript 5术语中的内部调用属性)与
正在调用它的函数(绑定函数的目标
函数)将此值绑定到bind()的第一个参数,
无法覆盖的。bind()也接受前导默认值
定义绑定函数时提供给目标函数的参数
打电话。也可以使用新的
运算符:这样做的行为就好像目标函数已被替换一样
构建。在前置时,将忽略提供的此值
参数提供给模拟函数
已经提供了它发生的原因。但是,回答您的问题,更优雅的解决方案是将foobar
传递为:
说:
如果将thisArg
参数提供给forEach
,则该参数将传递给
调用时回调,用作其此
值。否则
值未定义
将作为其此
值传递使用。
这个
值最终可由回调函数观察到
根据
演示:提供了它发生的原因。但是,回答您的问题,更优雅的解决方案是将foobar
传递为:
说:
如果将thisArg
参数提供给forEach
,则该参数将传递给
调用时回调,用作其此
值。否则
值未定义
将作为其此
值传递使用。
这个
值最终可由回调函数观察到
根据
演示:@thefourtheye感谢您的评论!我相应地编辑了我的答案。@thefourtheye谢谢你的评论!我相应地编辑了我的答案。
[1, 2, 3].forEach(foobar.foo, foobar);