用可变属性名构造JS对象的简写方法

时间:2012-07-04 09:58:32

标签: javascript backbone.js javascript-objects

是否有创建具有属性字段变量的对象的简写方法?

说我有变量PROP.Todo.PRIORITY = 'priority'然后,在这个例子中使用Backbone,我想save这个属性,我怎么能避免创建一个新对象,分配它一些变量,然后设置属性?

我想实现这个目标:

var tmpObj = {};
tmpObj[PROP.Todo.PRIORITY] = "high";
this.model.save(tmpObj);

我尝试过这样的事情,这是不成功的:

this.model.save(({}[PROP.Todo.PRIORITY] = "high"));

有什么建议吗?否则,我将编写很多长手对象声明。

2 个答案:

答案 0 :(得分:4)

如果只保存一个参数,Model.save有另一种接收参数的方式,(key,value,options)

http://backbonejs.org/#Model-save

  

保存 model.save([attributes],[options])
  [...]与set一样,您可以传递单个键和值而不是散列。 [...]

这意味着您可以将您的示例写为

this.model.save(PROP.Todo.PRIORITY, "high");

如果要同时保存多个属性,则必须编写临时对象。

答案 1 :(得分:2)

如果您只想要一种更简单的方法来创建对象,那么如何使用辅助函数?

function obj(prop, value) {
  var o = {};
  o[prop] = value;
  return o;
}

this.model.save(obj(PROP.Todo.PRIORITY, "high"));

我不确定我理解你问题的后半部分:

  

否则我会创建很多临时对象。

在任何情况下你都必须创建一个对象,我怀疑创建对象是一个性能问题。