JS绑定对象函数调用自身

Kam*_*224 1 javascript

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

如果我称它为正常,它可以正常工作.但是如果我调用它作为forEach函数中的参数传递它除非我将它绑定到自身,否则它不起作用.

有更优雅的解决方案吗?

这是一个例子:

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
Run Code Online (Sandbox Code Playgroud)

小提琴:http://jsfiddle.net/q29yatc2/

Vis*_*ioN 6

@Christos提供了一个很好的解释为什么会发生.然而,回答你的问题,更优雅的解决方案将通过foobarthisArgforEach:

[1, 2, 3].forEach(foobar.foo, foobar);
Run Code Online (Sandbox Code Playgroud)

文件说:

如果thisArg提供了参数forEach,则在调用时它将被传递给回调,以用作其this值.否则,undefined将传递该this值以用作其值.this通过回调最终可观察到的值是根据用于确定函数所见的通常规则来确定的.

演示: http ://jsfiddle.net/q29yatc2/4/