dev*_*r82 5 javascript ecmascript-6 es6-class
在 ES5 样式的 javascript 中,要覆盖该toString方法,我只需执行以下操作:
function myFunction() {
}
myFunction.prototype.toString = function() {
return "My amazing function";
};
var myAmazingFunc = new myFunction();
console.log(myAmazingFunc);
Run Code Online (Sandbox Code Playgroud)
在我当前的代码中,我使用 ES6,我的对象现在是一个类(本质上是一个函数)。
class MyAwesomeClass {
// awesome code goes here
}
Run Code Online (Sandbox Code Playgroud)
我试图覆盖该toString方法的方法如下:
class MyAwesomeClass {
toString() {
return "Awesome";
}
}
Run Code Online (Sandbox Code Playgroud)
并且
class MyAwesomeClass {
// awesome code goes here
}
MyAwesomeClass.prototype.toString = function() {
return "Awesome";
};
Run Code Online (Sandbox Code Playgroud)
也没有prototype- 但它似乎仍然没有被调用。这在 ES6 类中怎么可能?
geo*_*org 12
这实际上确实有效:
class MyAwesomeClass {
toString() {
console.log("toString called");
return "Awesome";
}
}
console.log(new MyAwesomeClass() + "!!!");Run Code Online (Sandbox Code Playgroud)
您的测试方式一定有问题(提示:console.log不会触发toString)。
如果您正在寻找一种自定义console.log输出的方法,这只能在 node.js ( https://nodejs.org/api/util.html#util_custom_inspection_functions_on_objects ) 中通过添加自定义inspect方法来实现。尽管从节点 10 开始不推荐使用此功能。
小智 12
不会为您console.log()调用该toString()方法...您还需要使用${}
class MyAwesomeClass {
toString() {
console.log("toString called");
return "Awesome";
}
}
let e = new MyAwesomeClass();
console.log(`${e}`);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5328 次 |
| 最近记录: |