是否有可能创建类似typeof的函数

时间:2013-03-25 18:32:38

标签: parameters parameter-passing javascript invocation

我做了一个更准确的typeof - 函数,并希望像默认的typeof - 运算符一样使用它。 Currenty我调用我的typeOf() - 函数就像其他函数一样:typeOf("foo"),但是有可能获得函数参数而不在它的parens中定义它们吗?与typeof - 运算符一样。

默认:typeof "foo" === "string"

期望:typeOf "foo" === "string"

我尝试过的是定义和覆盖全局变量,但是可行,但不是真正的解决方案:

window.typeOf = "foo";
(function(window) {
    window.typeOf = (Object.prototype.toString.call(window.typeOf).match(/\[object (.+)\]/)[1] + "").toLowerCase();
}(this));

console.log(typeOf); // "string"

2 个答案:

答案 0 :(得分:2)

  

...是否可以获取函数参数而不在其parens中定义它们?

不,不是。这将要求JavaScript允许您创建新的运算符,而不是函数,这不是该语言所具有的功能。 (有两个函数 - toStringvalueOf - 可以作为表达式的一部分隐式调用对象,但这对你没有帮助。)

答案 1 :(得分:0)

这在普通的javascript中是不可能的。您无法定义自定义运算符,仅定义对象,因此无法定义函数您也无法更改调用函数的javascripts语法。

如果你真的想要使用这样的语法,你可以使用coffeescript并编写像这样的代码

typeOf = (x) -> "whatever you want"

typeOf "string"

将转换为像这样的javascript

var typeOf;

typeOf = function(x) {
  return "whatever you want";
};

typeOf("string");

Example

但是没有办法在纯JavaScript中复制它。

快速搁置

还有一点需要注意:即使你确实拥有它,我也不建议命名这个运算符typeOf。命名2个行为相似但行为略有不同的东西,除了单个大写字母之外,只是乞求难以追踪和检查的微妙拼写错误。像exactType或其他不同的东西会消除潜在的混淆/错误。