为什么不't将通知更新绑定到变量

Why doesn't bind notice updates to a variable?

本文关键字:更新 绑定 变量 通知 为什么不      更新时间:2023-09-26

为什么不将通知更改绑定到变量值?此外,为什么绑定不接受像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();

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

me.name = 'Rob2';

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

实际上,您正在创建新对象,并将此新创建对象的引用分配给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();