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。