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);
};
不需要
var attrs = attributes || {};
因为属性不在任何其他地方使用。它可以像选项一样对待。只需将构造函数参数更改为attrs
并删除arguments
。
var Model = Backbone.Model = function(attrs, options) {
attrs || (attrs = {});
请注意,有三个属性,如变量。传入的参数attributes
,实例变量this.attributes
以及本地和可能的额外局部变量attrs
。
答案 0 :(得分:1)
你所宣称的并不完全正确。 attributes
哈希被复制到attrs
,后来就地进行了修改;但是,初始参数attributes
未经掺杂地传递给initialize.apply
。
您还可以编写this.initialize.call(this, attributes, options)
以使其更加明确。
attrs
是attributes
的可变副本。 options
只能被阅读,而不是写入,因此不需要复制。
* JavaScript中的所有内容都是可变的,但此代码的行为就好像参数是不可变的一样。
答案 1 :(得分:0)
通常,代码将包含并非严格必要的变量,但对于提高可读性或减少混淆非常有用。在这种情况下,可能会将本地范围的变量与模型的this.attributes
属性区分开来。