在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课程中怎么可能?
答案 0 :(得分:2)
这确实有效:
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开始不推荐使用此功能。
答案 1 :(得分:0)
您要首先实例化课程吗?如果我创建一个班级:
class myclass {}
并添加原型,甚至只是标准方法:
myclass.prototype.toString = () => "hi"
// or, using the class syntax
class myclass {
toString() {
return "hi"
}
}
然后我可以实例化该类,它可以工作:
new myclass().toString()
> "hi"
也许您试图在静态的,未实例化的类本身上调用它。为此,您需要在类中添加一个静态方法。
class myclass {
static toString() {
return "myclass toString"
}
}
因此,当您在类的非实例化版本上调用此方法时,您将获得重写的方法:
myclass.toString()
> "myclass toString"
答案 2 :(得分:0)
console.log()
不会为您调用toString()
方法...您还需要使用${}
class MyAwesomeClass {
toString() {
console.log("toString called");
return "Awesome";
}
}
let e = new MyAwesomeClass();
console.log(`${e}`);