Javascript 扩展函数返回的属性?

Javascript 扩展函数返回的属性?,javascript,backbone.js,Javascript,Backbone.js,我是一个JS初学者。我在主干模型上定义了一个函数,如下所示 myFunction: function () { return { firstAttr: this.model.get('value-attribute') }; } 我可以通过this.myFunction使用它 我想从代码中的其他地方扩展this.myFunction以返回另一个属性。换句话说,我希望它返回一个带有两个属性的dict:{firstAttr:'something',secondAttr:true}

我是一个JS初学者。我在主干模型上定义了一个函数,如下所示

myFunction: function () {
  return {
    firstAttr: this.model.get('value-attribute')
  };
}
我可以通过
this.myFunction
使用它

我想从代码中的其他地方扩展
this.myFunction
以返回另一个属性。换句话说,我希望它返回一个带有两个属性的dict:
{firstAttr:'something',secondAttr:true}

我该怎么做

我试过:

this.myFunction().secondAttr = true;

但我知道这样做是错误的

将您的
myFunction
修改为:

myFunction : function () {
    var i,
        obj = {};
    for (i=0; i< arguments.length;i++){
        obj['attribute'+(i+1)] = this.model.get(arguments[i]);
    }
  return obj;
}
myFunction:function(){
var i,
obj={};
对于(i=0;i

通过这种方式,您可以发送
模型的
,如果您的模型原型看起来像

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());
请参见演示

或者动态修改原型以更改所有实例:

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());

好吧,myFunction每次都返回一个新对象,因此
this.myFunction().secondAttr
没有多大意义,因为它会立即丢失
var f=this.myFunction();f、 secondAttr=true