0

我想要实现的是使用 fromBackbone.Model或相反的方法扩展先前定义的类,无论哪种效果最好。基本上我的代码如下所示:

var SomeObject = function() {};
SomeObject.CLASS_ATTRIBUTE = 'something';
SomeObject.prototype.aFunction = function() { return Math.E; };
SomeObject.prototype.attrB = 'wat';

var SomeModel = Backbone.Model.extend({});

在这一点上,我如何扩展SomeModelSomeObject或相反)以包含CLASS_ATTRIBUTE以及作为模型属性aFunction 而不attrB失去Backbone.Model功能?

谢谢您的回答!

4

2 回答 2

0

如果SomeObject这样定义:

var SomeObject = {
  CLASS_ATTRIBUTE: 'something',
  aFunction: function () { return MATH.E; },
  attrB: 'wat'
}

然后

var SomeModel = Backbone.Model.extend({
 // ...
});

_.extend(SomeModel.prototype, SomeObject);

会做你需要的

于 2013-02-08T15:28:12.133 回答
0

你说的扩展是什么意思?

  1. 你想合并你的对象吗?
  2. 你想添加自定义“方法”SomeModel吗?
  3. 您是否希望创建一个同时具有 和 的方法和属性的新SomeModel对象SomeObject

JSFiddle


var SomeObject = function() {};
SomeObject.CLASS_ATTRIBUTE = 'something';
SomeObject.prototype.aFunction = function() { return Math.E; };
SomeObject.prototype.attrB = 'wat';
var SomeModel = Backbone.Model.extend({});

// Merging instances of objects
var newSomeObject = new SomeObject(),
    newSomeModel = new SomeModel(),
    mergedObjects = $.extend(true, newSomeModel, newSomeModel);

console.log(mergedObjects);

// Prototyping
var mergedProto = $.extend(true, SomeModel.prototype, SomeObject.prototype);
console.log(mergedProto);

//factory
var myMergefactory = function() {
    var ret = $.extend(true, SomeModel.prototype, SomeObject.prototype);
    return ret;
}

作为说明,这也是有效的......

var SomeModel = Backbone.Model.extend({});
SomeModel.CLASS_ATTRIBUTE = 'something';
SomeModel.prototype.aFunction = function() { return Math.E; };
SomeModel.prototype.attrB = 'wat';

或这个...

var SomeModel = Backbone.Model.extend({
    initialize: function (params) {
        $.extend(true, this, params.obj);
    }
});
var mObj = new SomeModel({obj: new SomeObject()});
于 2013-02-08T15:41:13.357 回答