修改 Object.prototype.toString.call 的值

  • 修改普通自定义构造函数
// [object Person] <=====实现要打印的目标
function Person() {
  this.name = 'mao'
}


const p = new Person()
Person.prototype[Symbol.toStringTag] = 'Person' 

console.log(Object.prototype.toString.call(p)) // [object Person]

const b = new Person() // 再来一个新实例试试
console.log(Object.prototype.toString.call(b)) // [object Person]
  • 修改ES内置原生对象
const aka = new Promise(() => {})
// 全局修改, 所有之后的Promise都被改了
Object.defineProperty(Promise.prototype, Symbol.toStringTag, {
  value: 'akaKUKU'
})
console.log(Object.prototype.toString.call(aka)) // [object akaKUKU] 

const bkb = new Promise(() => {})
// 本实例修改, 仅bkb实例被改了
Object.defineProperty(bkb, Symbol.toStringTag, {
  value: 'MMP'
})
console.log(Object.prototype.toString.call(bkb))
const ddd = new Promise(() => {})
// [object akaKUKU]  验证了全局修改
console.log(Object.prototype.toString.call(ddd)) 

THE END
分享
二维码
< <上一篇
下一篇>>