如何检测具有特定签名的JavaScript函数?

Ale*_*gas 11 javascript

假设您有两个具有以下签名的函数:

  1. addClass( class )
  2. addClass( class, duration )

这些住在第三方图书馆(没有奖品可以猜测哪个!!).

如果addClass()使用两个参数调用但仅注册了签名1,则不会出现错误,并且将调用签名1.第二个参数被忽略.

那么有没有办法检测到已经注册了两个参数的签名2 ?

Guf*_*ffa 27

您可以使用length函数对象的属性来检查签名.例:

function x(a) {}
function y(a,b) {}

alert(x.length); // shows "1"
alert(y.length); // shows "2"
Run Code Online (Sandbox Code Playgroud)


Joh*_*rug 8

JavaScript中没有本机方法重载.您可以创建自己的:http://ejohn.org/blog/javascript-method-overloading/

(2015年11月5日更新:链接似乎已经死了,这是Google Cache版本)

所以,如果你这样做

function addClass( class ) { console.log('1 arg'); };
function addClass( class, duration ) { console.log('2 args'); };
Run Code Online (Sandbox Code Playgroud)

第二个覆盖第一个.所以即使你调用"addClass(1)",输出仍然是"2 args".和做的一样

someObject.addClass = function(a) {...}
someObject.addClass = function(a, b) {...}
Run Code Online (Sandbox Code Playgroud)

第一个"版本"将丢失.