0

私は次のようなJQueryTinyPub/Subを見ています。

(function($){
  var o = $({});

  $.subscribe = function() {
    o.bind.apply( o, arguments );
  };

  ...

})(jQuery);

コードがo.bindを呼び出しているので、バインド内の「this」はとにかくoであるため、applyを使用する理由はありません。

言い換えると、

o.bind(arguments) 

o.bind.apply(o, arguments) 

ここは同じである必要がありますか?なぜo.bind.apply(o、arguements)?

4

2 に答える 2

4

.apply渡す引数の配列を取るので、それらは同じものではありません。このことを考慮:

function foo(a, b, c) {
    console.log(a);
    console.log(b);
    console.log(c);
}

foo.apply(null, [1, 2, 3]);
// Prints:
// 1
// 2
// 3

foo([1, 2, 3]);
// Prints:
// [1,2,3]
// undefined
// undefined

あなたはそれをと混同しているかもしれません.call、それは確かに冗長でしょう。

于 2012-07-04T23:48:12.197 に答える
1

との間には違いがbindありapplyます。Bindは引数を取り、applyは引数を持つスコープと配列を取得します。

これをより明確にするため。これは同じです:

o.bind(1,2,3);

o.apply(o, [1,2,3]);
于 2012-07-04T23:52:50.233 に答える