【javaScript】先创建实例对象,还是先修改prototype为另一个对象,对实例对象原型的影响

176 阅读1分钟

关键词: 构造函数, prototype

先创建实例,后修改prototype

尽管最后重写了构造函数的prototype,但实例对象的__proto__仍然指向最初的prototype

function Foo() {}
console.log(Foo.prototype) // {constructor: Foo()}
let foo = new Foo
// 修改prototype为新的对象
Foo.prototype = {
  age: 100
}
console.log(foo.__proto__) // {constructor: Foo()}
console.log(foo.age) // undefined

foo 本身没有 age 属性,且 Foo 最初的 prototype 上只有一个 constructor 属性,也没有 age 属性,所以会返回 undefined

先修改prototype,后创建实例

在创建实例对象之前就已经修改 Foo.prototype 为一个新的对象,即该实例对象的__proto__指向的是这个新的 prototypefoo.age 的值为 100

function Foo() {}
console.log(Foo.prototype) // {constructor: Foo()}
// 修改prototype为新的对象
Foo.prototype = {
  age: 100
}
console.log(Foo.prototype) // Foo.prototype已经修改为:{age: 100}
let foo = new Foo

console.log(foo.__proto__) // {age: 100}
console.log(foo.age) // 100

参考: JavaScript高级程序设计(第3版)-第156页