在Backbone 1.1.2中,第279行
// Return a copy of the model's `attributes` object.
toJSON: function(options) {
return _.clone(this.attributes);
},
选项显然没有使用,所以为什么要在那里使用它。这只是浪费的记忆。
我在这里缺少什么?
这里的评论是调用此代码的一种方式 - 为什么在不使用时传递选项?
toJSON: function(options) {
return this.map(function(model){ return model.toJSON(options); });
},
答案 0 :(得分:2)
它不会浪费内存,因为参数必须以arguments[0]
的形式提供(任一选项都是一个函数调用,而vm必须为副作用而做,或者它&# 39;只是一个对象,所以它只是一个参考)。
它还可以作为超类可以实现的文档参考。
由于JS使用原型进行面向对象,如果您在其中一个超类中创建toJSON
函数,则可以使用它。
答案 1 :(得分:2)
在Model.toJSON
签名中包含该功能没有任何功能性原因 - 它严格适用于开发人员'益处。
来自link that @t.niese uncovered:
早上@aoboturov!感谢您指出了这一点。它实际上是故意的,并且是为了提醒您,默认情况下,collection.toJSON(options)会将options参数传递给每个模型。有关详细信息,请参阅#1222和#1098。
(请注意,引用的#1222基本上只是一个骗局,而#1098是他们首先添加该功能的地方。)
换句话说,为了清楚起见,可能希望覆盖Model.toJSON
实现的开发人员将参数放在那里。该集合会传递原始Backbone.sync
调用的options
对象,因为Model.toJSON
的某些实现可能想要使用它。
在签名中包含options
参数根本不会影响内存使用(即使它确实如此,效果也会微乎其微),因为Collection.toJSON
实现将该选项对象传递为无论如何都是一种争论。