Array 内置了很多方法,但是无法满足所有用户的需求,这时可以为 Array 对象扩展方法,以便提高代码重用率。扩展数组的方法一般通过 Array 的原型来实现。
Array.prototype._m = Array.prototype.m || (Array.prototype.m = function () {
//扩展方法的具体代码
Object.prototype.m = Array.prototype._m;
上面代码是一种数组扩展方法的通用模式,详细解析如下。
其中 Array 是数组构造函数,prototype是构造函数的属性,由于该属性指向一个原型对象,然后通过点运算符为其定义属性或方法,这些属性和方法将被构造函数的所有实例对象继承。
首先,利用判断数组中是否存在名称为 m 的原型方法,如果存在则直接引用该原型方法即可,不再定义;否则,定义原型方法 m()。
其次,把定义的原型方法 m() 引用给原型方法 _m() ,这样做的目的是防止原型方法 m() 引用给 Object 对象的原型时发生死循环调用,可以兼容 Firefox 浏览器。
最后,把数组的临时原型方法 _m() 引用给 Object 对象的原型,这样能够确保所有对象都可以调用这个扩展方法。经过临时原型方法 _m() 的中转,就可以防止数组(Array)和对象(Object)都定义了同名方法,如果把该方法传递给 Object,而 Objrct 的原型方法又引用了 Array 的同名原型方法,就会发生循环引用现象。
为数组扩展一个求所有元素和的方法。
Array.prototype._m = Array.prototype.sum || //检测是否存在同名方法
(Array.prototype.m = function () { //定义该方法
var _n = 0, _this = []; //临时汇总变量
for (var i in this) { //遍历当前数组对象
if (_this[i] = parseFloat(this[i])) _n += _this[i]; //如果数组元素是数字,则进行累加
return _n; //返回累加的和
Object.prototype.sum = Array.prototype._sum; //把临时方法赋值给对象的原型方法sum()
该原型方法 sum() 能够计算当前数组中元素为数字的和。在该方法的循环结构体中,首先试图把每个元素转换为浮点数,如果转换成功,则把它们相加;转换失败将返回 NaN,会忽略该元素的值。
var a = [1,2,3,4,5,6,7,8,"9"]; //定义数组直接量
console.log(a.sum()); //返回45
其中第 9 个元素是一个字符串类型的数字,汇总时也被转换为数值进行相加。
socket
Python基础教程
MySQL函数
MySQL
C语言入门
C语言专题
C语言编译器
C语言编程实例
GCC编译器
C语言项目案例
C++教程
OpenCV
Unity 3D教程
Redis
Android教程
JavaScript
Mybatis
Spring Cloud
Maven
Spring Boot
Spring MVC
Hibernate
Linux
Linux命令
Shell脚本
Java教程
Spring
Servlet
Struts2
Java Swing
JSP教程
CSS教程
TensorFlow
Go语言教程
Docker
VIP视频
Go语言数据类型转换
C++ left和right操作符用法详解
新世纪网安VC++编程班视频教程
汇编语言内存模式指令简述
Java isEmpty()方法:判断字符串是否为空
JSP JSTL <x:set>标签:保存XML节点
Hibernate Criteria接口 createAlias方法:建立连接查询
Spring Cloud Ribbon自定义负载均衡策略
Swagger是什么?Swagger怎么用?