H5W3
当前位置:H5W3 > 其他技术问题 > 正文

【Web前端问题】实例化之后的prototype对象为什么就不对了

function Person() {

    }
Person.prototype = {
    constructor: 'Person',
    name: 'LI',
    age: 22
}
var a = new Person();
console.log(a.age)


function Person() {

    }
var a = new Person();
Person.prototype = {
    constructor: 'Person',
    name: 'LI',
    age: 22
}
console.log(a.age)

回答:

先讲一下,对象寻找原型链是通过 __proto__ 属性来寻找的,每一个(构造)函数,在声明之后就会在内存中同步开辟一个空间保存一个对象,构造函数中会有一个prototype指向这个对象,而这个对象中会有一个constructor属性指向构造函数

function Person() {}
var a = new Person();

当代码执行这句的时候,会实例化一个a对象,其中有个属性 __proto__ 指向构造函数的prototype

a.__proto__ === Person.prototype;//true
Person.prototype = {
    constructor: 'Person',
    name: 'LI',
    age: 22
}

执行这句的时候,Person.prototype将不再指向上面讲的原型对象,而是指向了别的对象(变心了),但是对于a来讲,他的爸爸还是上面讲的原型对象(只有一个constructor属性的空对象)

通俗的将就是 改嫁后生的娃 与 改嫁前生的娃,两个娃爸爸不同

回答:

代码有执行顺序,你第二种写法里new对象的时候Person还没有prototype

本文地址:H5W3 » 【Web前端问题】实例化之后的prototype对象为什么就不对了

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址