字面量修改原型

问题背景

JavaScript高级程序设计中提到用字面量修改prototype会导致实例无法通过[[Prototype]]访问原型
切断实例与新原型之间的联系

解决

使用Object.assign函数 复制需要的属性和方法

function f() {
  this.a = 1
}
let a = new f()
console.log(a.__proto__ === f.prototype);
Object.assign( f.prototype,{
  b:123,
  p() {
    console.log(this);
  }
})
console.log(a.__proto__ === f.prototype)
a.p()    // {a: 1}
a["p"]() // {a: 1}
posted @ 2023-01-11 21:53  dou_fu_gan  阅读(25)  评论(0)    收藏  举报