2023年7月17日 星期一

覆蓋 String.replace() 對物件的行為

 覆蓋 String.replace() 對物件的行為

前言

  在研究 Symbol 時發現可以覆蓋 String.replace() 對物件的行為,在此把學習的過程做紀錄。


內容

  String.replace() 對物件的行為預設是會回傳原本的字串,透過覆蓋可以改變該行為,範例如下

class Replace1 {
  constructor(value) {
    this.value = value;
  }
  [Symbol.replace](string) {
    return `${string} replace ${this.value}`;
  }
}
let obj ={};
obj[Symbol.replace] = function(string){
  return "I am cusutom replace.";
}
console.log('foo'.replace(new Replace1('bar')));//"foo replace bar"
console.log('foo'.replace(obj) );//"I am cusutom replace."


覆蓋的做法是在要被覆蓋的物件裡定義覆蓋 function ,透過 Symbol.replace 來指名覆蓋,範例示範在 class 與 object 的覆蓋,覆蓋 function 的參數是來源的 String ,也就是喚起 replace() 的 String。


參考資料

[ developer.mozilla.org ] Symbol.replace

沒有留言:

張貼留言