根据以前关于原型的知识(https://segmentfault.com/a/11...),渐渐引出了原型链的概念。凡是对象都有原型,而在JavaScript中,万物皆对象,因此,原型也是对象,也具备原型,也就是原型的原型,如此下去,会构成一个对象序列,该结构即为原型链。如前面提到,实例对象经过 proto 访问原型。segmentfault
那么,原型链何时到头呢?默认的原型链结构又是怎样的呢?浏览器
凡是使用构造函数,而且没有利用赋值方法修改原型的对象,则保留默认的原型链,该原型链经过 proto 一直向上访问必须最终到头,返回值 null。注意,这里说的是原型的值为null,须要与以前的属性查找原则所说的没有该属性返回的是undefined区分开来。函数
以一个简单的构造函数为例,演示默认的原型链结构:工具
function Person(){} var p = new Person(); 当前实例对象 -> Person.prototype -> Object.prototype -> nll 能够在Google浏览器调试工具中查看
经过修改(增长、删除等)原型链结构,使得实例对象具备原型链上的全部方法prototype
上面讲的是对象的原型链,那函数的原型链呢?调试
一、函数的构造函数code
在js中,使用Function能够实例化函数对象,也就是说在js中,函数与普通对象同样,也是一个对象类型,因此函数能够对象
二、Function的实例代码继承
var foo = new Function("参数一", "参数二", "..."); Function的参数全是字符串,它是将参数链接起来的函数 没有参数,表示空函数; 只有一个参数,表示函数体; 有N个参数,最后一个表示函数体,前面全部的都表示函数体的参数;
综上,new Function 在功能上与普通函数并没有二意。从下面的代码,也能够看出。ip
function foo(a, b){ var sum = a + b; return sum; } var foo = new Function("a", "b", "var sum = a + b; return sum;");
三、函数的原型链 任何函数都是Function的实例,因此函数能够经过__proto__访问到其原型(Function.prototype)。原型也是一个对象,继承自Object.prototype。当前的原型链结构为: fn -> Function.prototype -> Object.prototype -> null