我们先通过构造函数创建一个对象
function Person() {
}
//Person 就是一个构造函数,我们使用 new 创建了一个实例对象 person
var person = new Person();
person.name = '张三';
console.log(person.name) // seven
JS在创建对象的时候都会创建对应类型的原型。
-
当我们给Person添加属性跟方法的时候,可以添加在对象中,也可以添加在原型中。区别是对象中的属性是独立的,原型中的属性是所有对象共享的。
-
当访问对象的属性跟方法时,先去对象中找,找不到再去原型中找。
-
每一个JS对象都有一个属性__proto__,这个属性会指向该对象的原型.
var person1 = new Person();
console.log(person1.__proto__ === Person.prototype); // true
- 每个对象跟原型都有一个 constructor 属性指向关联的构造函数实例原型指向构造函数。
console.log(Person === Person.prototype.constructor); // true
- 原型也是一个特殊的对象,也有
__proto__
属性,默认指向Object.prototype
。
我们访问对象的属性跟方法先去对象中找,找不到就去对应的原型上找,原型找不到再去父原型上面找,直到顶级原型Object.prototype
。JS中是通过原型链来达到继承的效果。