我试图覆盖Backbone.Model
上的构造函数来调整传递给父构造函数的属性。这就是我想要做的事情:
Models.Item = Backbone.Model.extend({
constructor: function (attributes, options) {
Backbone.Model.apply(this, this.parse(attributes), options);
},
parse: function (attributes) { .... }
)};
我的问题是使用未定义的参数调用父构造函数。
https://github.com/jashkenas/backbone/blob/master/backbone.js#L254
var Model = Backbone.Model = function(attributes, options) {
var attrs = attributes || {};
options || (options = {});
this.cid = _.uniqueId('c');
this.attributes = {};
if (options.collection) this.collection = options.collection;
if (options.parse) attrs = this.parse(attrs, options) || {};
attrs = _.defaults({}, attrs, _.result(this, 'defaults'));
this.set(attrs, options);
this.changed = {};
this.initialize.apply(this, arguments);
};
attributes
和options
参数都是未定义的,这意味着模型使用默认参数进行实例化。
现在我可以覆盖initialize
方法并取消设置错误属性,将其替换为正确的属性。但这看起来像是一个黑客。
为什么使用未定义的参数调用父构造函数?
我错过了什么?
答案 0 :(得分:0)
错误与Function.
apply和Function.
call
apply
需要两个参数,一个给定的this
值和一组参数。
call
期望n + 1
个参数,给定的this
值和n
参数传递给函数。
Backbone.Model.apply(this, this.parse(attributes), options);
应该是:
Backbone.Model.call(this, this.parse(attributes), options);
或者
Backbone.Model.apply(this, [this.parse(attributes), options]);
按原样调用apply
函数会导致未定义的变量。