JavaScript进阶(四)原型与原型链用法实例分析(2)

凡是对象就有原型,原型也是对象。因此凡是给定一个对象,那么就可以找到他的原型,原型还有原型,那么如此下去,就构成一个对象的序列,称该结构为原型链。

问题:

原型链到底到什么时候是一个头?

一个默认的原型链结构是怎样的?

原型链结构对已知语法的修正

5.1 原型链的结构

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

默认原型链结构是什么样子呢?

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

默认的原型链结构就是:当前对象 -> 构造函数.prototype -> Object.prototype -> null

JavaScript进阶(四)原型与原型链用法实例分析

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

function DunizbCollection(){} DunizbCollection.prototype = []; var arr = new DunizbCollection(); // arr -> [] -> Array.prototype -> Object.prototype -> null

JavaScript进阶(四)原型与原型链用法实例分析

六、函数的构造函数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 的构造原型实例三角形结构

JavaScript进阶(四)原型与原型链用法实例分析

6.3 为什么要使用Function?

Function是使用字符串构建函数,那么就可以在程序运行过程中构建函数.

以前的函数必须一开始就写好,再经过预解析,一步一步的运行

假定从服务器里拿到“[1,2,3,4,5]”,将数组形式的字符串转换成数组对象

var arr = ( new Function( 'return ' + str + ' ;' ) )();

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具测试上述代码运行效果。

更多关于JavaScript相关内容可查看本站专题:《JavaScript常用函数技巧汇总》、《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/0592e056588a7df90a7abec83fb3839e.html