我做了一个更准确的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"
答案 0 :(得分:2)
...是否可以获取函数参数而不在其parens中定义它们?
不,不是。这将要求JavaScript允许您创建新的运算符,而不是函数,这不是该语言所具有的功能。 (有两个函数 - toString
和valueOf
- 可以作为表达式的一部分隐式调用对象,但这对你没有帮助。)
答案 1 :(得分:0)
这在普通的javascript中是不可能的。您无法定义自定义运算符,仅定义对象,因此无法定义函数您也无法更改调用函数的javascripts语法。
如果你真的想要使用这样的语法,你可以使用coffeescript并编写像这样的代码
typeOf = (x) -> "whatever you want"
typeOf "string"
将转换为像这样的javascript
var typeOf;
typeOf = function(x) {
return "whatever you want";
};
typeOf("string");
但是没有办法在纯JavaScript中复制它。
还有一点需要注意:即使你确实拥有它,我也不建议命名这个运算符typeOf。命名2个行为相似但行为略有不同的东西,除了单个大写字母之外,只是乞求难以追踪和检查的微妙拼写错误。像exactType
或其他不同的东西会消除潜在的混淆/错误。