- 每個(gè)構(gòu)造函數(shù)都有一個(gè)默認(rèn)的屬性, 叫做prototype, 這個(gè)屬性指向一個(gè)對(duì)象(原型對(duì)象)
- 每個(gè)原型對(duì)象都有一個(gè)默認(rèn)的屬性, 叫做constructor, 這個(gè)屬性指向原型對(duì)象對(duì)應(yīng)的構(gòu)造函數(shù)
- 每個(gè)對(duì)象都有一個(gè)默認(rèn)的屬性, 叫做_proto_(雙杠), 這個(gè)屬性指向創(chuàng)建它的構(gòu)造函數(shù)的原型對(duì)象
上代碼
// 定義一個(gè)構(gòu)造函數(shù)
function Person(name, age) {
this.name = name;
this.age = age;
}
// 給構(gòu)造函數(shù)的原型對(duì)象添加屬性和方法
Person.prototype.say = function () {
console.log(this.name, this.age);
};
Person.prototype.type = "Human";
// 通過(guò)構(gòu)造函數(shù)創(chuàng)建對(duì)象
var obj1 = new Person("luodou", 13);
console.log(obj1); //Person
console.log(Person.prototype); //Object
console.log(obj1.__proto__); //Object
console.log(obj1.__proto__ === Person.prototype); // true
console.log(obj1.__proto__.constructor); //? Person(name, age) {this.name = name;this.age = age;}
console.log(Person.prototype.constructor); //? Person(name, age) {this.name = name;this.age = age;}
console.log(obj1.__proto__.constructor === Person.prototype.constructor); //true
關(guān)系圖
原型鏈
上圖
看圖炬丸,不解釋
- 注意Person的原型對(duì)象實(shí)質(zhì)上是Object的一個(gè)實(shí)例瘫寝,任何自定義的對(duì)象,在原型鏈上都可以找到Object
待續(xù)......