我很难理解下面代码中剩下的函数是如何工作的。
(注解来源:http://documentcloud.github.com/backbone/docs/todos.html)
我对 apply 的理解是,第一个参数是上下文,其余参数是一个数组,作为参数传递给正在应用的函数。
var TodoList = Backbone.Collection.extend({
model: Todo,
localStorage: new Backbone.LocalStorage("todos-backbone"),
done: function()
{
return this.filter(function(todo) { return todo.get('done'); });
},
remaining: function()
{
return this.without.apply(this, this.done());
},
});
因此:
this.without.apply(this,this.done());--〉翻译为:
without(array of arguments as parameters to without function);
- without* 将第一个参数作为数组,并从数组中删除2... n个参数。
我不明白这个函数是如何做任何有用的。这是什么原因呢?
2条答案
按热度按时间rvpgvaaj1#
this.without.apply(this,this.done());--〉翻译为:
without(array);
其实不然。你所知道的以数组作为第一个参数的下划线函数可以作为 Backbone.js 集合上的方法应用(就像下划线链接 Package 器一样)。假设
this.done()
的计算结果为[x, y, z]
,则apply
调用转换为当然,一个更有效的方法是
44u64gxh2#
Backbone.js 集合具有一堆Underscore函数的绑定方法版本,因此
(大致)等同于
和/或
(大致)等同于
还有很多人我写的是“粗略”,因为绑定方法的版本会干涉可迭代对象简写的解释方式,至少现在是这样。
无论如何,
done
方法返回一个模型数组,其中done
属性为truthy。without
方法将此集合反转;它返回done
属性为falsy的模型数组。