hangzz / hangzz.github.io

:anguished:
0 stars 0 forks source link

重写prototype,发生了什么改变 #1

Open hangzz opened 7 years ago

hangzz commented 7 years ago

例子

function Person() {}
var person = new Person();
Person.prototype.eat = function() {
     console.log('food')
}
person.eat() // "food"
function Person() {}
var person = new Person();
Person.prototype ={
    constructor:Person,
    eat:function(){
        console.log('food')
    }
}
person.eat() // error : person.eat is not a function

首先对象是引用类型,Person.prototype是一个指针,指向的是具体原型对象。person.__proto__指向的是创建实例时的初始原型对象。

所以重写对象Person.prototype ,并不会影响person.__proto__指向初始原型对象,只是修改了Person.prototype的指针指向。