gpt4 book ai didi

javascript - 为什么在这个 Backbone todo-mvc 示例应用程序中需要 'apply'?

转载 作者:行者123 更新时间:2023-11-30 08:48:29 24 4
gpt4 key购买 nike

在主干 Todo MVC 中 source , 函数的原生 apply 方法用于调用 Underscore 方法 without ,我不明白为什么有必要。

// Filter down the list of all todo items that are finished.
completed: function() {
return this.filter(function( todo ) {
return todo.get('completed');
});
},

// Filter down the list to only todo items that are still not finished.
remaining: function() {
return this.without.apply( this, this.completed() );
},

filter 等其他 Underscore 方法相比,对 without 的调用看起来不合适。我仔细检查了 Backbone 源以确保 without 没有以不同方式混合到 Collection 对象中。果然不是。

这就是下划线方法如何附加到 Collection:

_.each(methods, function(method) {
Collection.prototype[method] = function() {
var args = slice.call(arguments);
args.unshift(this.models);
return _[method].apply(_, args);
};
});

正如预期的那样——集合的模型已经作为第一个参数传递。此外,由于这些方法是在 Collection 对象上调用的,this 将被正确绑定(bind)。

我通过将方法更改为以下来验证这一点

this.without(this.completed());

而且效果很好。

我在这里忽略了什么?

最佳答案

我认为您没有忽略任何事情。这只是对 apply 的不必要调用。可能作者最初写了以下内容(可能是针对早期版本的 backbone)。

// Filter down the list to only todo items that are still not finished.
remaining: function() {
return _.without.apply( this, this.completed() );
},

关于javascript - 为什么在这个 Backbone todo-mvc 示例应用程序中需要 'apply'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19871275/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com