为什么不绑定对变量的通知更新?

时间:2016-08-02 06:40:18

标签: javascript bind

为什么不将通知更改绑定到变量值?另外,为什么不绑定接受未清除的变量,如warrior.bind({'name': 'Rob3'}, 'ninja')

function warrior(kind){
  console.log(this.name);
}

var me = {'name': 'Rob'}    
var ninja = warrior.bind(me, "ninja");
ninja();
me = {'name': 'Rob2'};
ninja();

2 个答案:

答案 0 :(得分:1)

当您运行me = {'name': 'Rob2'};时,会创建一个全新的对象并将其分配到me变量中。 ninja函数仍绑定到旧me。相反,您需要保留相同的对象,但只修改其属性,如下所示:

me.name = 'Rob2';

不确定在warrior.bind函数中使用对象文字有什么问题,这对我有用,但您希望以后能够更改对象。

答案 1 :(得分:1)

实际上,您正在创建新对象并将此新创建的对象的引用分配给me变量。如果要继续使用绑定而不是创建新对象,则应更新属性。

function warrior(kind){
  console.log(this.name);
}

var me = {'name': 'Rob'}    
var ninja = warrior.bind(me, "ninja");
ninja();
me.name = 'Rob2'; // Do not create new object. Update already existing one.
ninja();