原型与原型链
1.原型:
每当一个构造函数被创建的时候,系统就会自动的分配,一个对象,该对象的作用就是为了实现对象的共享方法。原型其实就是一个对象,存在内存中,原型可以给构造函数实列化(new)对象提供方法。
访问对象的原型:
构造函数.prototype(构造函数的原型)
实例化对象.__proto__(实例化对象访问原型)
1 function Person(name,age,gender){ 2 this.name=name; 3 this.age=age; 4 this.gender=gender; 5 } 6 7 //构造函数原型中创建一个方法 8 Person.prototype.sayHi=function(){ 9 console.log('hi~'); 10 } 11 12 var person = new Person('Tony',12,'boy');//实例化函数 13 console.log(person.sayHi);//调用方法 14 15 var person1=new Person('Anny',12,'girl'); 16 console.log(person1.sayHi); 17 //两个实例化后的对象指向同一个方法 18 console.log(person.sayHi==person1.sayHi);//true 19 //构造函数的原型与实例化后的原型指向相同 20 console.log(Person.prototype===person.__proto__)//true
两个原型对象的关系如图:

2.原型链
在内存中,存在多个原型对象,都存在着链式关系
function Person(){}//创建构造函数 let person=new Person();// 实例化对象 console.log(Person.prototype==person.__proto__);//true console.log(Object.prototype.__proto__);//null //原型对象也是另一个构造函数通过new实例化得到的 console.log(person.__proto__.__proto__);//object console.log(person.__proto__.__proto__.__proto__);//null var obj=new Object(); console.log(obj);
该关系如图所示:


浙公网安备 33010602011771号