我已经声明了两种方法。

String.prototype.hazaa = function (shazoo) {
  return this + shazoo;
}

Number.prototype.hazaa = function (shazoo) {
  return this + shazoo;
}


当我打电话给前者时,我得到了预期的行为。但是,调用第二个,将产生以下错误。


  语法错误:意外的令牌ILLEGAL(...)


我感觉是我的C#风格令人恐惧(我在考虑扩展方法和面向对象的调用)。调用的执行如下。

"abc".hazaa("shazoo");
12345.hazaa(00000000);


是否有另一种语法可以调用我添加的功能?我是否没有以正确的方式宣布原型添加?

是的,我已经做了the research,但是我可能遗漏了一个相关的要点。

最佳答案

问题在于,它在解析12345.hazaa(00000000);时,将hazaa视为数字的小数点之后,因此出现了意外的标记。如果将数字括在括号中,则会对其进行正确解析和执行:

(12345).hazaa(00000000);


由于解析已经完成,它将继续在变量上正常工作:

var a = 123;
a.hazaa(0000);


正如Jaromanda X在评论中提到的那样,允许正确解析的另一种方法是使用双点语法:

12345..hazaa(00000000);

10-07 15:23