简单的prototype和constructor

118 阅读1分钟

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就是谁给学生盖了章