JavaScript – Backbone.js – Todo Collection – 这个return语句究竟发生了什么?

我回头看看Backbone todo列表,并提出有关该集合的问题。

这里是代码:

window.TodoList = Bacbone.Collection.extend({

        model: Todo,

        localStorage: new Store("todos"),

        done: function() {
            return this.filter(function(todo){return todo.get("done")})
        },

        remaining: function() {
            return this.without.apply(this, this.done());
        }



    })

我理解这里发生的一切,除了“剩余”功能。

return语句:return this.without.apply(this,this.done());正在使用下划线方法的代理 – _.without

根据Underscore文档,这里是:

without_.without(array, [*values]) Returns a copy of the array with
all instances of the values removed. === is used for the equality
test.

_.without([1, 2, 1, 0, 3, 1, 4], 0, 1);
=> [2, 3, 4]

所以,我得到它的意思是返回集合中的所有内容,而没有’true’属性,值为’true’。

我不明白的是“应用”功能被链接到它。这不会出现在Backbone文档或Underscore文档中。至少没有任何地方可以找到它。

任何人都可以详细解释Return语句中的这些元素发生了什么?

最佳答案
这是指集合。

apply是一种JavaScript函数的方法,允许您设置方法的上下文并向调用者发送值数组。

应用期望上下文作为第一个参数,然后是数组或类似数组(如参数),将作为参数传递给函数。

你可以做同样的事情.call除了第二个参数是逗号分隔。

应用和调用是原生的javascript。

所以…

return this.without.apply(this,this.done());

方法this.done()返回一个数组,但使用集合的上下文,并传递一系列值通过无法方法忽略。这反过来返回在集合中未完成的所有todos。

例:

_.without([1,2,3,4],1,2); === _.without.call([], [1,2,3,4], 1, 2);

转载注明原文:JavaScript – Backbone.js – Todo Collection – 这个return语句究竟发生了什么? - 代码日志