构造函数、原型对象、实例对象关系
2018-11-14 本文已影响0人
箩篼
- 每个构造函数都有一个默认的属性, 叫做prototype, 这个属性指向一个对象(原型对象)
- 每个原型对象都有一个默认的属性, 叫做constructor, 这个属性指向原型对象对应的构造函数
- 每个对象都有一个默认的属性, 叫做_proto_(双杠), 这个属性指向创建它的构造函数的原型对象
上代码
// 定义一个构造函数
function Person(name, age) {
this.name = name;
this.age = age;
}
// 给构造函数的原型对象添加属性和方法
Person.prototype.say = function () {
console.log(this.name, this.age);
};
Person.prototype.type = "Human";
// 通过构造函数创建对象
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
关系图
原型链
上图
看图,不解释
- 注意Person的原型对象实质上是Object的一个实例,任何自定义的对象,在原型链上都可以找到Object
待续......