原型链初探

  

对象的原型链

1 含义

对象有原型, 原型又是对象, 因此凡是给定义一个对象, 那么就可以找到他的原型, 原型还有原型.如此下去, 就构成一个对象的序列

2 原型链的结构

   2.1 默认的原型链的结构

凡是使用构造函数创建出对象, 并且没有利用赋值的方式修改原型, 就说该对象保留默认的原型链。

默认原型链结构是什么样子呢?我给大家举一个例子:

 function Person() {}
    var p = new Person();
    // p 具有默认的原型链

默认的原型链结构就是:

当前对象 -> 构造函数.prototype -> Object.prototype -> null

 

 

比如:写出[  ]的原型链结构(我用画图的方式给大家画出来)

 

 

 

再比如:{  }的原型链图(还是用画图的方式展示,我觉得这样会比较清晰,也比较容易理解)

 

 

还有一点值得注意的是:

在实现继承的时候, 有时会利用替换原型链结构的方式实现原型继承, 那么原型链结构就会发生改变。

 function ItcastCollection () {}
    ItcastCollection.prototype = [];
    var arr = new ItcastCollection();

此处的原型链结构就是:arr--【】--Array.prototype--Object.prototype--null

3 原型式继承

所谓的原型式继承就是利用修改原型链的结构( 增加一个节点, 删除一个节点, 修改节点中的成员 ), 来使得实例对象可以使用整条链中的所有成员.

这里的使用规则必须满足属性搜索原则

4 构造函数Function                                     

任意的一个函数, 都是相当于 Function 的实例. 类似于 {} 与 new Object() 的关系

    function foo () {}
    // 告诉解释器, 有一个对象叫 foo, 它是一个函数
    // 相当于 new Function() 得到一个 函数对象
  1. 函数应该有什么属性? __proto__
  2. 函数的构造函数是什么? Function
  3. 函数应该继承自 Function.prototype
  4. Fucntion.prototype 继承自 Object.protoype

 

  4.1 绘制函数的三角形结构

 

 

posted @ 2016-10-04 10:32  effie0220  阅读(119)  评论(0)    收藏  举报