快速理解原型链

1、构造函数、原型对象、实例

来个例子认识一下:函数

 1 function Person() {
 2 
 3 }
 4 Person.prototype.name = '原型对象上定义的属性';
 5 Person.prototype.sayName = function () {
 6     console.log('原型对象上的方法');
 7 }
 8 
 9 var person1 = new Person();
10 person1.sayName();  // '原型对象上的方法'

这里的 Person 就是一个构造函数,和普通的函数是同样的,只是构造函数要经过new 操做符来使用。this

Person.prototype 就是原型对象spa

而person1 就是Person的一个实例。prototype

2、构造函数、原型对象、实例 三者的关系

1)构造函数有一个原型对象(Person.prototype)
2)原型对象包含一个指向构造函数的指针
 
1  Person.prototype.constructor == Person // true 
 
3)实例包含一个指向原型对象内部的指针
  能够经过 isPrototypeOf() 方法来确认指向的原型对象
1 console.log(Person.prototype.isPrototypeOf(person1)); // true

 

3、原型链的造成指针

基本的实现原理就是强制的让一个对象的原型等于另外一个对象的实例。那么这个对象的原型就拥有了一个指向另一个对象的原型对象的内部指针。
如今咱们有两个对象,对象1 和对象2 ,
咱们让对象2的原型指向对象1 的实例,那么对象2就包含了对象1 的原型指针,
而对象1的原型对象中又包含着指向构造函数1的指针,
那么这个时候出现了对象3 , 对象3的原型对象又指向了对象2的实例。好像有点绕,咱们来看一个例子:
 1 function  typeOne()  {    //  这就是对象1 
 2 this.val  =  true;
 3 }
 4 typeOne.prototype.getTypeOneVal  =  function(){
 5 return  this.val;
 6 }
 7 
 8 function  typeTwo(){
 9 this.valTwo  =  false;
10 }
11 typeTwo.prototype  =  new  typeOne();  //  让对象2的原型指向对象1的实例,这时候对象2的原型上就有了对象1拥有的属性和方法
13 console.log(typeTwo.prototype.getTypeOneVal())  //  true
14 
15 //这时候再实例化 typeTwo
16
17 var  instance  =  new  typeTwo();
18 console.log(instance.getTypeOneVal())  //  会在原型链上查找 

这就是一个简单的原型链实现了,当出现第三个对象、第四个对象这样链式的写下去,原型链将会更长。code

相关文章
相关标签/搜索