0

我正在查看 JQuery Tiny Pub/Sub,它看起来像这样:

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

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

  ...

})(jQuery);

我不明白的是,由于代码调用了 o.bind,bind 中的“this”无论如何都是 o,因此没有理由使用 apply。

换句话说,

o.bind(arguments) 

o.bind.apply(o, arguments) 

这里应该是相同的,不是吗?为什么 o.bind.apply(o, 争论)?

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 回答