prototype和__proto__区别

prototype和__proto__分别是显式原型和隐式原型,直接上代码吧:

function person(){
    this.age = 12;
}
person.prototype; //Object
let person1 = new person();
person1.__proto__; // Object
person1.__proto__ === person.prototype; //true

可以看到显式原型和隐式原型是同一个对象~~甚至,如果你操作person1.__proto__等价于操作person.prototype

ps:网上查资料的时候同时查到,关于Object.create的问题

function person(){
    this.age = 12;
}
let person1 = new person();
let person2 = Object.create(person1);
let person3 = new person();
person1.__proto__ === person2.__proto__; //false
person1.__proto__ === person3.__proto__; //true

其实es5对象的原型,都是一个它“继承”的对象,es5实现继承的方法之一就是靠create了,当然更多的方法是直接把构造函数的prototype指向一个要继承的对象。

person2.__proto__ === person1 //true

person2就是继承自person1,同样操作person2.__proto__等同于直接操作person1。

原文地址:https://www.cnblogs.com/amiezhang/p/7859943.html