6

こんにちは、バックボーンのサンプル アプリ ( http://backbonejs.org/examples/todos/index.html ) で、remaining()関数で apply ( this.without.apply(this, this.done() ); ) でなく、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());
},

ありがとう !

#アップデート

デバッガ出力

this.without(this.done())
[child, child, child, child]
this.without.apply(this, this.done());
[child, child, child]
4

3 に答える 3

4

引数の可変リスト

鍵は書かれていない方法にあります:

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

引数の可変リストを予期しています。これを行う 1 つの方法は、apply を使用することです。

...
return this.without.apply(this, ['pass', 'these', 'arguments']);

apply についての詳細はMDN ドキュメントにあります。

于 2013-07-19T19:13:31.693 に答える
2

これら 2 つの呼び出しの違いは何ですか?

this.without( this.done() )

対。

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

this.done()明確にするために、ネストされた呼び出しを削除しましょう。最初のものは次のとおりです。

var value = this.done();
this.without( value );

そのコードは明らかに、によって返されたものはthis.without()何でも、単一の引数を呼び出して渡します。たまたま配列の場合、配列全体が単一の引数として渡されます。valuethis.done()value

2 番目のバージョンは次のようになります。

var array = this.done();
this.without.apply( this, array );

this.without()の各要素に対して 1 つの引数、可変数の引数を使用して呼び出しますarray。(そして、このコードを意味のあるものにするためには配列でなければならないので、今回はarray代わりにそれを呼び出しました。)value

.apply()またthis、呼び出された関数を設定するためthis、最初の引数として渡すと、通常のメソッド呼び出しthisと同じ方法でその関数に渡されます。this.without()

于 2013-07-19T19:13:21.883 に答える