2012-07-04 24 views
4

是否有一种使用属性字段变量创建对象的简写方法?构造具有可变属性名称的JS对象的速记方法

说我有可变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

如果你只是想要一个更简单的方法来创建对象,那么使用辅助函数怎么样?

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

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

我不知道我理解你的问题的后半部分:

我要另行创建大量的临时对象。

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

+0

感谢您的答案 - 我喜欢这个解决方案,但其他答案可能是我的选择路线。是的,我的措辞本可以更好。我并不是指“临时”,我的意思是需要大量宣布新对象......即,很多代码膨胀,这不是性能问题。 –

4

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

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

节省model.save([属性],[选项])
[...]与设置一样,您可以传递单个键和值而不是散列。 [...]

,这意味着你可以写你的例子作为

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

如果你想同时保存多个属性,你就必须写一个临时对象。

+0

+1阅读文档。 :)没有意识到有一种方法可以做到这一点。 – casablanca

+0

谢谢 - 这是我会一起去的。不过,我想我会接受另一个答案,就像将来一样,如果人们通过谷歌来到这里,它会更直接地回答问题的标题。 –

+0

@Ed。没问题 – nikoshr

相关问题