我是一名JS初学者。我在Backbone模型上定义了一个函数,如下所示。
myFunction: function () {
return {
firstAttr: this.model.get('value-attribute')
};
}
我可以this.myFunction
使用它。
从代码中的其他位置,我想扩展this.myFunction
以返回另一个属性。换句话说,我希望它返回一个包含两个属性的词典:{ firstAttr: 'something', secondAttr: true }
。
我该怎么做?
我试过了:
this.myFunction().secondAttr = true;
但我知道这是错误的。
答案 0 :(得分:2)
假设您的模型原型看起来像
var MyModel = Backbone.Model.extend({
myFunction: function () {
return {
// I assume you work directly on a model
// the principle would be the same with a wrapper object
firstAttr: this.get('value-attribute')
};
}
});
您可以在模型基础上屏蔽您的方法,如下所示:
var m = new MyModel({'value-attribute': 'attr, the first'});
console.log(m.myFunction());
m.myFunction = function () {
var res = MyModel.prototype.myFunction.call(this);
res.secondAttr = true;
return res;
};
console.log(m.myFunction());
请参阅http://jsfiddle.net/V8zt2/了解演示
或动态修改原型以更改所有实例:
var f = MyModel.prototype.myFunction;
MyModel.prototype.myFunction = function () {
var res = f.call(this);
res.secondAttr = true;
return res;
};
var m = new MyModel({'value-attribute': 'attr, the first'});
console.log(m.myFunction());
答案 1 :(得分:0)
如何将myFunction
修改为:
myFunction : function () {
var i,
obj = {};
for (i=0; i< arguments.length;i++){
obj['attribute'+(i+1)] = this.model.get(arguments[i]);
}
return obj;
}
通过这种方式,您可以将keys
model
的{{1}}作为myFunction
的参数发送到返回的对象中。