鍍金池/ 問答/HTML/ 實例化之后的prototype對象為什么就不對了

實例化之后的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)
回答
編輯回答
葬憶

代碼有執(zhí)行順序,你第二種寫法里new對象的時候Person還沒有prototype

2017年8月17日 23:33
編輯回答
雨蝶

先講一下,對象尋找原型鏈是通過 __proto__ 屬性來尋找的,每一個(構(gòu)造)函數(shù),在聲明之后就會在內(nèi)存中同步開辟一個空間保存一個對象,構(gòu)造函數(shù)中會有一個prototype指向這個對象,而這個對象中會有一個constructor屬性指向構(gòu)造函數(shù)

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

當代碼執(zhí)行這句的時候,會實例化一個a對象,其中有個屬性 __proto__ 指向構(gòu)造函數(shù)的prototype

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

執(zhí)行這句的時候,Person.prototype將不再指向上面講的原型對象,而是指向了別的對象(變心了),但是對于a來講,他的爸爸還是上面講的原型對象(只有一個constructor屬性的空對象)

通俗的將就是 改嫁后生的娃 與 改嫁前生的娃,兩個娃爸爸不同

2018年2月21日 10:55