【问题标题】:Javascript [Symbol.toPrimitive](hint) to convert functionJavascript [Symbol.toPrimitive](hint) 转换函数
【发布时间】:2019-11-23 20:21:36
【问题描述】:

在 JS 中函数属于对象类型。可以使用[Symbol.toPrimitive](hint) 将对象转换为原始类型。这种纯对象转换工作正常:

let obj = {
  [Symbol.toPrimitive](hint) {
    switch(hint) {
      case "string": return "all right";
      case "number": return 100;
      default: return "something else";
    }
  }
};

alert(obj); // all right
alert(+obj); // 100

但是,函数转换有问题:

function fun() {
  [Symbol.toPrimitive](hint) { // JS engine starts to complain here
    switch(hint) {
      case "string": return "all right";
      case "number": return 100;
      default: return "something else";
    }
  }
}

alert(fun);
alert(+fun);

我在这里缺少什么?如何将函数转换为某种原始类型?

【问题讨论】:

    标签: javascript function type-conversion primitive


    【解决方案1】:

    您需要解决函数的Symbol.toPrimitive 属性并分配一个函数。

    否则,您将使用带有符号的数组并尝试使用它调用不存在的函数。

    function fun() {
    }
    
    fun[Symbol.toPrimitive] = function (hint) {
        switch(hint) {
            case "string": return "all right";
            case "number": return 100;
            default: return "something else";
        }
    };
    
    console.log(fun);
    console.log(+fun);

    【讨论】:

      【解决方案2】:

      function(...){ 之后的 { 块内部只能是函数体。要分配给函数对象的属性,您必须在声明函数之后执行此操作:

      function fun() {
      }
      fun[Symbol.toPrimitive] = function(hint){ // JS engine starts to complain here
        switch(hint) {
          case "string": return "all right";
          case "number": return 100;
          default: return "something else";
        }
      };
      
      console.log(fun);
      console.log(+fun);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-02
        • 1970-01-01
        • 1970-01-01
        • 2022-01-04
        • 2015-04-09
        • 2016-11-26
        相关资源
        最近更新 更多