[英]ES6 how to override toString() method?
在 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 類中怎么可能?
這實際上確實有效:
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 開始不推薦使用此功能。
console.log()
不會為你調用toString()
方法......你還需要使用${}
class MyAwesomeClass { toString() { console.log("toString called"); return "Awesome"; } } let e = new MyAwesomeClass(); console.log(`${e}`);
你是先實例化這個類嗎? 如果我創建一個類:
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"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.