首页 > 解决方案 > ES6 如何重写 toString() 方法?

问题描述

在 ES5 样式的 javascript 中,要覆盖该toString方法,我只需执行以下操作:

function myFunction() {
}

myFunction.prototype.toString = function() {
    return "My amazing function";
};

var myAmazingFunc = new myFunction();
console.log(myAmazingFunc);

在我当前的代码中,我使用 ES6,我的对象现在是一个类(本质上是一个函数)。

class MyAwesomeClass {
    // awesome code goes here
}

我试图覆盖该toString方法的方法如下:

class MyAwesomeClass {
    toString() {
        return "Awesome";
    }
}

并且

class MyAwesomeClass {
    // awesome code goes here
}
MyAwesomeClass.prototype.toString = function() {
    return "Awesome";
};

也没有prototype- 但它似乎仍然没有被调用。这在 ES6 类中怎么可能?

标签: javascriptecmascript-6es6-class

解决方案


这实际上确实有效:

class MyAwesomeClass {
  toString() {
    console.log("toString called");
    return "Awesome";
  }
}

console.log(new MyAwesomeClass() + "!!!");

您的测试方式一定有问题(提示:console.log不会触发toString)。

如果您正在寻找一种自定义console.log输出的方法,这只能在 node.js ( https://nodejs.org/api/util.html#util_custom_inspection_functions_on_objects ) 中通过添加自定义inspect方法来实现。尽管从节点 10 开始,此功能已被弃用。


推荐阅读