凡是对象就有原型,原型也是对象。因此凡是给定一个对象,那么就可以找到他的原型,原型还有原型,那么如此下去,就构成一个对象的序列,称该结构为原型链。
问题:
原型链到底到什么时候是一个头?
一个默认的原型链结构是怎样的?
原型链结构对已知语法的修正
5.1 原型链的结构凡是使用构造函数,创建出对象,并且没有利用赋值的方式修改原型,就说该对象保留默认的原型链。
默认原型链结构是什么样子呢?
function Person(){} var p = new Person(); //p 具有默认的原型链
默认的原型链结构就是:当前对象 -> 构造函数.prototype -> Object.prototype -> null
在实现继承的时候,有时候会利用替换原型链结构的方式实现原型继承,那么原型链结构就会发送改变
function DunizbCollection(){} DunizbCollection.prototype = []; var arr = new DunizbCollection(); // arr -> [] -> Array.prototype -> Object.prototype -> null
六、函数的构造函数Function在JS中使用Function可以实例化函数对象 。也就是说在JS中函数与普通对象一样,也是一个对象类型。函数是JS中的一等公民。
函数是对象,就可以使用对象的动态特性
函数是对象,就有构造函数创建函数
函数是对象,可以创建其它对象
函数是唯一可以限定变量作用域的结果
要解决的问题
Function 如何使用
Function 与函数的关系
函数的原型链结构
6.1 函数是Function的实例语法
new Function( arg0,arg1,arg1,….argN, body );
Function 中的参数全部是字符串
该构造函数的作用是将参数链接起来组成函数
如果参数只有一个,那么表示函数体
如果参数有多个,最后一个参数表示函数体,前面的所有参数表示函数的参数
如果没有参数,表示创建一个空函数
举例:创建一个打印一句话的函数
// 传统的 function foo () { console.log( '你好' ); } //Function var func = new Function( 'console.log( "你好" );' ); // 功能上,这里foo 与 func 等价
再比如,创建一个空函数
//传统 function foo () {} //Function var func = new Function(); func();
传入函数内一个数字,打印该函数
//传统 function foo ( num ) { console.log( num ); } //Function var func = new Function( "num" ,"console.log( num )" ); func();
6.2 函数的原型链结构任意的一个函数,都是相当于Function的实例,类似于{}与new Object()的关系。
function foo () {}
上面的代告诉解析器,有一个对象叫foo,它是一个函数;相当于new Function()得到一个函数对象
函数应该有什么属性?答:__proto__
函数的构造函数是什么?答:Function
函数应该继承自Function.prototype
Function.prototype继承自Object.prototype
对于Function,我们还必须知道
Object函数是Function的一个实例
Object作为对象是继承自Function.prototype的,又“Function.prototype”继承自Object.prototype
foo.prototype.__proto__ === Object.prototype // true
Function是自己的构造函数
在JS 中任何对象的老祖宗就是Object.prototype
在JS中任何函数的老祖宗就是Function.prototype
下面绘制出 Function 的构造原型实例三角形结构
6.3 为什么要使用Function?Function是使用字符串构建函数,那么就可以在程序运行过程中构建函数.
以前的函数必须一开始就写好,再经过预解析,一步一步的运行
假定从服务器里拿到“[1,2,3,4,5]”,将数组形式的字符串转换成数组对象
var arr = ( new Function( 'return ' + str + ' ;' ) )();
感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:测试上述代码运行效果。
更多关于JavaScript相关内容可查看本站专题:《JavaScript常用函数技巧汇总》、《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结》