JS原型链总结

原型链总结:

function  Person(){ }

var p1 = new Person();

var o1 = new Object();

1、只有构造函数有原型对象,即只有Person.prototype才有意义,还有诸如内置构造函数Number.prototype 、Boolean.prototype等

2、对象都有__proto__属性,这个属性指向构造函数的原型对象,即

p1.__proto__ === Person.prototype;   //p1构造器是Person

o1.__proto__  ===  Object.prototype;    //o1构造器是Object

Person.prototype.__proto__ === Object.prototype;      //Person.prototype代表Person的原型对象,原型对象本质还是对象,构造器是Object

Person.__proto__ === Function.prototype;     //Person是构造函数对象,构造器是Function

Object.prototype.__proto__ === null;     //规定,保证原型链能正常结束

3、原型链只存在于实例对象和其构造函数的原型对象之间,不存在于实例和构造函数之间

Person.prototype.name = 'Lily';

console.log(p1.name);      //Lily

console.log(Person.name);   //undefined

4、原型链是以__proto__形成,而不是prototype,例

function Car(price){

    this.price = price;

}

Car.prototype.type = 'SUV';

var c = new Car(100);

console.log(c.price);       //100    因为构造函数中的this代表当前对象,所以构造函数中已经定义实例对象的price属性值等于传入的参数

console.log(c.type);     //SUV   由于构造函数中没有定义type属性,所以去检查c.__proto__中是否有type属性,而c.__prototype__ === Car.prototype,一看,有了,c.type === c.__proto__.type === Car.prototype.type;假如c.__proto__依然没有定义type属性,那就继续往上检查c.__proto__.__proto__中是否有,即Car.prototype.__proto__,亦即Object.prototype;继续往上,就到了Object.prototype.__proto__ = null,这就到头了,检查结束 ^-^



你可能感兴趣的:(JS原型链总结)