为什么不使用此参数?

时间:2014-06-20 21:52:26

标签: javascript backbone.js

在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); });
},

2 个答案:

答案 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实现将该选项对象传递为无论如何都是一种争论。