1.理解原型
每个函数都会创建一个prototype属性,这个属性是一个对象。使用原型对象的好处是,在它上面定义的属性和方法可以被对象实例共享。
function Person(){}
Person.prototype.name = "a-train"
Person.prototype.sayName = function(){
console.log(this.name)
}
let Person1 = new Person()
Person1.sayName()//"a-train"
let Person2 = new Person()
Person1.sayName()//"a-train"
console.log(Person1.sayName == Person2.Name) //true
默认情况下,所有原型对象会默认获得一个constructor属性,指回与之关联的构造函数。在上面的例子,Person.prototype.constructor指向Person,在这里明确一下构造函数和原型对象还有实例是三个不同的对象。Person.prototype指向原型对象,Person.prototype.constructor指向构造函数,Person1指向对象。
function Person(name) {
this.name = name;
}
const person = new Person('ozh');
person.constructor === Person; // true
Person.prototype.constructor === Person; // true
实例的属性constructor指向构造函数,实例与构造函数原型之间有直接的联系,但实例与构造函数之间没有。