1

我正在尝试学习 jquery 插件,在此过程中我首先尝试了解一些 jquery 插件。我已经阅读了一些插件,并且在插件的开头遇到了一些常见的代码旋转网。

if (methods[method]) {
     return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
 } else if (typeof method === 'object' || !method) {
     return methods.init.apply(this, arguments);
 } else {
     $.error('Method ' + method + ' does not exist on jQuery.jModalbox');
 }

任何人都可以告诉我,

  1. 是这样吗,我们在构建插件时必须遵循这个
  2. 我观察到控制台不会出现

    返回方法[方法].apply(this, Array.prototype.slice.call(arguments, 1));

    那么为什么我们需要 if 部分。

  3. 为什么用apply调用方法init,我的意思是为什么调用喜欢: methods.init.apply(this, arguments); 为什么不喜欢这样:methods.init(arguments);
  4. 我读过这个apply(),但不清楚。请任何人解释
4

1 回答 1

3

这很难解释,但我会尽力而为。

如您所知,apply方法采用 2 个参数。第一,context of function第二, array of function parameters

contextis 就像我们可以称为 object-self 的引用function scopethis它在功能中被引用。

您显示的这段代码必须使用 apply 方法,因为他们想要设置context被调用的函数。我真的确定被调用的函数是用来this做某事的。

如果您直接调用函数,它将没有this您想要的参考。这就是为什么他们必须使用 apply 而不是直接调用。

希望这可以帮助!

有关更多信息,您可以阅读

于 2013-10-01T09:34:41.080 回答