你如何在严格模式下找到匿名函数的arity?

时间:2013-01-13 07:49:18

标签: javascript jquery scope anonymous-function arity

jQuery plugin pattern之后,在我们使用apply()来定义{{1}的范围的情况下,如何找到函数的arity,比如methods.myfunc函数。并将this应用于此?

arguments

这可能会暴露我对功能范围的一些无知,但我在这里很难过,并且没有找到足以解释这个问题的例子。

我对这个问题的部分启发来自NodeJS / ExpressJS,它们对某些函数有不同数量的参数。例如,如果传递了3个参数,则假设存在错误对象,但您可以轻松传递两个并且没有问题!

更新:将代码中的函数从init更改为myfunc

1 个答案:

答案 0 :(得分:3)

您必须使用命名函数表达式(with all its idiosyncrasies):

var methods = {
  init : function init () {
    var arity = init.length;
  }
};

这是小提琴:http://jsfiddle.net/tqJSK/

说实话,我不知道为什么你需要这个。您可以在函数中对该数字进行硬编码,因为命名参数的数量永远不会改变...


更新:正如@ T.J.Crowder所指出的,您可以改为使用常规函数声明:

(function($, window, document) {

    function init () {
        var arity = init.length;
    }

    var methods = {
      init : init
    };

}(jQuery, window, document));

更新2:如果您要查找的是此特定电话中提供的参数数量,请使用arguments.length

var methods = {
  init : function () {
    var count = arguments.length;
  }
};

这是小提琴:http://jsfiddle.net/tqJSK/1/