Parameters 是否有可能创建一个类型相似的函数

Parameters 是否有可能创建一个类型相似的函数,parameters,parameter-passing,javascript,invocation,Parameters,Parameter Passing,Javascript,Invocation,我制作了一个更精确的typeof-函数,并希望像默认的typeof-操作符一样使用它。当前,我调用我的typeOf()-函数,就像调用其他函数一样:typeOf(“foo”),但是,不在其参数中定义它们,是否可以获取函数参数?类似于-运算符的类型 默认值:typeof“foo”==“string” 所需:typeOf“foo”=“string” 我尝试的是定义和覆盖一个全局变量,虽然有效,但不是真正的解决方案: window.typeOf = "foo"; (function(window) {

我制作了一个更精确的
typeof
-函数,并希望像默认的
typeof
-操作符一样使用它。当前,我调用我的
typeOf()
-函数,就像调用其他函数一样:
typeOf(“foo”)
,但是,不在其参数中定义它们,是否可以获取函数参数?类似于-运算符的
类型

默认值:
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"
…是否可以在不在参数中定义的情况下获取函数参数


不,不是。这需要JavaScript允许您创建一个新的操作符,而不是函数,这不是语言的一个特性。(有两个函数-
toString
valueOf
,可以作为表达式的一部分在对象上隐式调用,但这对您没有帮助。)

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

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

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

typeOf "string"
var typeOf;

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

typeOf("string");
它将像这样转换为javascript

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

typeOf "string"
var typeOf;

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

typeOf("string");

但在纯javascript中无法复制这一点

快速靠边站
还有一个注意事项:我不建议将这个操作符命名为typeOf,即使你有它。将两个行为相似但行为略有不同的事物命名为同一事物而不是一个大写字母,这只是在乞求难以追踪和检查的细微打字错误。类似于
exactType
或其他不同的方法可以消除潜在的混淆/错误。

您要求函数的行为与运算符相同(
typeof
是一元运算符)。不幸的是,这在Javascript中是不可能的,因为运算符是语言的一部分,您无法定义自己的运算符。@FrédéricHamidi好的,这是Javascript中最糟糕的部分;-)谢谢您可以使用:)