在处理对象时需要帮助理解函数绑定

时间:2016-08-08 18:09:20

标签: javascript

function theFunction() {
    console.log(this.some)
}

//Case 1
var object = {
    aFun:theFunction.bind({some: 'case 1'})
}

//Case 2
var object2 = {
    aFun:theFunction
}
object2.aFun.bind({some: 'case 2'});
object.aFun();
object2.aFun();

以上返回

case 1
undefined 

我希望它是

case 1
case 2

为什么这种方式与我预期的不同?我有办法解决这个问题。我大部分时间都在研究这种方法的原因。

1 个答案:

答案 0 :(得分:1)

问题是bind 返回函数的副本,其中this设置为第一个参数的值,而不是直接修改函数。

要获得预期的结果,您可以更改

object2.aFun.bind({some: 'case 2'})

object2.aFun = object2.aFun.bind({some: 'case 2'})