【问题标题】:Is it somehow possible to create a typeof-like function是否有可能创建一个类似类型的函数
【发布时间】:2013-03-25 18:32:37
【问题描述】:

我做了一个更准确的typeof-function,想像默认的typeof-operator一样使用它。目前,我像其他所有函数一样调用我的typeOf()-函数:typeOf("foo"),但是是否可以在不在其括号中定义它们的情况下获取函数参数?就像typeof-operator 一样。

默认: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"

【问题讨论】:

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

标签: parameters parameter-passing javascript invocation


【解决方案1】:

...是否有可能获得函数参数而不在其括号中定义它们?

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

【讨论】:

    【解决方案2】:

    不,这在普通的 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,即使您确实拥有它。将两个行为相似但行为略有不同的事物命名为除了单个大写字母之外的相同事物,这只是在乞求难以追踪和检查的细微错字错误。 exactType 之类的东西或其他不同的东西会消除潜在的混乱/错误。

    【讨论】:

      猜你喜欢
      • 2016-10-18
      • 1970-01-01
      • 2021-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多