prototype
是指原型对象,由于构造函数在实例化对象的方法时,方法是引用类型需要在内存中开辟空间,如果存在大量实例化对象会占用大量内存。prototype可以解决这个问题
function Func() {
this.sing = function () {
console.log(1);
};
}
Func.prototype.get = function get() {
console.log(2);
};
let a = new Func();
let b = new Func();
console.log(a.sing == b.sing); //false 方法引用地址不同
console.log(a.get == b.get); //true 方法引用地址相同,所有实例化对象共享方法
console.log(a.__proto__ == Func.prototype); //true 实例a的'原型'等于构造函数的'原型对象'
console.log(a.__proto__ == b.__proto__); //true 实例a的'原型'等于实例b的'原型'
构造函数就像请假
构造函数中的属性就是去班长那领请假条,一人一个
而方法就是去老师那盖章,是同一个章
原型对象就是那个章
所以得出所有实例的原型是同一个,就是构造函数的原型对象
constructor
实例的__proto__和构造函数的prototype中都会有一个constructor属性,用于指明构造函数
console.dir(Func.prototype.constructor); //Func
console.dir(a.__proto__.constructor); //Func
console.dir(Func.prototype.constructor == a.__proto__.constructor); //true
所以prototype就是老师给谁盖了章
constructor就是谁给学生盖了章