首先我们要先了解几个概念,js万物皆对象,所有类型(对象,函数,数组...)都有一个属性 proto,只有函数才有属性prototype。
下面我们先来看一下构造函数属性constructor
function Person(name, age) {
this.name = name;
this.age = age;
this.sayName = function() { alert(this.name) };
}
var person1 = new Person("BurC", 21);
var person2 = new Person("VinX", 22);
console.log(person1.constructor == Person); //true
console.log(person2.constructor == Person); //true
person1 和 person2 都是 Person 的实例。这两个实例都有一个 constructor (构造函数)属性,该属性指向 Person。 所以说这个construct属性指向的是他的构造函数。
找原型链是在属性__proto__ 属性上去找,而不是在属性prototype上面去找。
function Person(){};
var burc = new Person();
console.log(burc.constructor === Person); //true
console.log(burc.__proto__ === Person .prototype); //true
console.log(burc.__proto__ === burc.constructor.prototype); //true
console.log(burc.__proto__); //Person() {}
console.log(burc.__proto__.__proto__); //Object() {}
console.log(burc.__proto__.__proto__.__proto__); //null
burc 的 __proto__ 属性指向 burc的构造函数的原型对象
柏成画了两张图帮助大家理解