嗨,有人可以解释为什么在剩余()函数中的骨干示例应用程序(http://backbonejs.org/examples/todos/index.html)中使用apply( this.without.apply(this,this。完成()); )而不是 this.without(this.done())
// Filter down the list of all todo items that are finished.
done: function() {
return this.where({done: true});
},
// Filter down the list to only todo items that are still not finished.
remaining: function() {
return this.without.apply(this, this.done());
},
谢谢!
#UPDATE
调试器输出
this.without(this.done())
[child, child, child, child]
this.without.apply(this, this.done());
[child, child, child]
答案 0 :(得分:4)
关键是没有写的方式:
function () {
var args = slice.call(arguments);
args.unshift(this.models);
return _[method].apply(_, args);
}
它预期会有一个变量参数列表,其中一种方法是使用apply:
...
return this.without.apply(this, ['pass', 'these', 'arguments']);
还有更多关于申请MDN documentation。
答案 1 :(得分:2)
你问这两个电话有什么区别:
this.without( this.done() )
VS
this.without.apply( this, this.done() );
为了澄清,我们删除嵌套的this.done()
电话。现在第一个是:
var value = this.done();
this.without( value );
该代码显然会调用this.without()
并传递一个参数,无论value
返回this.done()
。如果value
恰好是一个数组,则整个数组作为单个参数传递。
第二个版本变为:
var array = this.done();
this.without.apply( this, array );
使用可变数量的参数调用this.without()
,为array
的每个元素调用一个参数。 (我这次称它为array
而不是value
,因为这段代码有意义,它必须是一个数组。)
.apply()
还在被调用函数中设置this
,因此将this
作为第一个参数传递,只需将this
传递给该函数,方式与常规{相同} {1}}方法调用。
答案 2 :(得分:0)
apply也允许您为函数指定“this”对象。 这有时很重要,比如在闭包中调用它时,“this”可能与你想要的不同。