Javascript中的Setter+;这条路对吗?

Javascript中的Setter+;这条路对吗?,javascript,syntax,backbone.js,Javascript,Syntax,Backbone.js,我得到了这个“目标” set方法setName不能这样做: 我试过了,但没用 setName: function(name){ this.get(name) = name; } 或 还有别的办法吗?我不能总认为原来的方式太难看,用不上。原来的方式对我来说最合适。必须在模型上调用set(),主干的事件系统才能正常工作。您的两个示例没有多大意义(即,将值赋给值,并对值而不是模型调用set() 实际上,我认为添加自己的setName方法有点奇怪。任何编程Backbone.js的人都应该知道如何在

我得到了这个“目标”

set方法
setName
不能这样做: 我试过了,但没用

setName: function(name){
  this.get(name) = name;
}


还有别的办法吗?我不能总认为原来的方式太难看,用不上。

原来的方式对我来说最合适。必须在模型上调用set(),主干的事件系统才能正常工作。您的两个示例没有多大意义(即,将值赋给值,并对值而不是模型调用set()


实际上,我认为添加自己的setName方法有点奇怪。任何编程Backbone.js的人都应该知道如何在模型实例上使用内置的set()函数来设置属性值。

我觉得原来的方法最好。必须在模型上调用set(),主干的事件系统才能正常工作。您的两个示例没有多大意义(即,将值赋给值,并对值而不是模型调用set()


实际上,我认为添加自己的setName方法有点奇怪。任何编程Backbone.js的人都应该知道在模型实例上使用内置的set()函数来设置属性值。

为了清楚起见,我将参数名称更改为
newName
。而:

this.set({name: newName});
方法:使用新值
newName
参数(正确)设置名为
name
的属性值,此形式:

setName: function(newName){
  this.get(newName) = newName;
}
什么也不做。它获取一个属性,该属性的名称在
newName
参数中提供,并返回该属性。这项任务无效

另一方面,这:

setName: function(newName){
  this[newName].set(newName);
}
可能会抛出一个错误<代码>此是主干模型对象。它包含
属性
属性,因此可能:

this.attributes[newName] = newName;
更合理(将在
newName
参数中传递名称的属性更改为
newName
值。但是在这种情况下不会触发
change
事件。但是让我猜一下,这是您真正想要的:

setAttr: function(name, value){
  var diff = {};
  diff[name] = value;
  this.set(diff);
}
在这种情况下,您可以调用:

model.setAttr('id', 7);
这相当于:

model.setAttr({id: 7});

并正确触发
change:id

为了清楚起见,我将参数名称更改为
newName
。同时:

this.set({name: newName});
方法:使用新值
newName
参数(正确)设置名为
name
的属性值,此形式:

setName: function(newName){
  this.get(newName) = newName;
}
不执行任何操作。它获取一个属性,该属性的名称在
newName
参数中提供,并返回该属性。赋值无效

另一方面,这:

setName: function(newName){
  this[newName].set(newName);
}
可能会引发错误。
是主干模型对象。它包含
属性
属性,因此可能:

this.attributes[newName] = newName;
更合理(将在
newName
参数中传递名称的属性更改为
newName
值。但是在这种情况下不会触发
change
事件。但是让我猜一下,这是您真正想要的:

setAttr: function(name, value){
  var diff = {};
  diff[name] = value;
  this.set(diff);
}
在这种情况下,您可以调用:

model.setAttr('id', 7);
这相当于:

model.setAttr({id: 7});

并正确触发
change:id

据我所知,这是标准方式,如果有更好的方式,我会让更有经验的骨干用户回答。据我所知,这是标准方式,如果有更好的方式,我会让更有经验的骨干用户回答。