Javascript JS绑定对象函数调用自身

Javascript JS绑定对象函数调用自身,javascript,Javascript,我用一个函数创建了一个对象,该函数使用'this'关键字引用自身的属性 如果我正常地叫它,它工作得很好。但如果我在forEach函数中调用pass作为参数,除非我将它绑定到自身,否则它不会工作 有更优雅的解决方案吗 以下是一个例子: var foobar = { foo : function (number) { this.bar(); }, bar : function () { return "string" } }; fo

我用一个函数创建了一个对象,该函数使用'this'关键字引用自身的属性

如果我正常地叫它,它工作得很好。但如果我在forEach函数中调用pass作为参数,除非我将它绑定到自身,否则它不会工作

有更优雅的解决方案吗

以下是一个例子:

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);