原型链初探
对象的原型链
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() 得到一个 函数对象
- 函数应该有什么属性?
__proto__ - 函数的构造函数是什么? Function
- 函数应该继承自
Function.prototype Fucntion.prototype继承自Object.protoype
4.1 绘制函数的三角形结构


浙公网安备 33010602011771号