原型的另外一个作用就是扩展对象中的属性和方法的

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type=text/javascript charset=utf-8>
//原型的另外一个作用就是扩展对象中的属性和方法的 // Array each方法
// ECMA5 forEach 循环遍历数组的每一项(只适合遍历一维数组)
var arr = [1,2,3,4,5];
arr.forEach(function(item , index , array){
alert(item);
});
// 自己实现一个Array each方法 能遍历多维数组
var arr = [1,2,3,[4,[5,[6]]]]; // arr.length Array.prototype.each = function(fn){//给数组的prototype增加一个静态方法,原型和数组对象可以用。prototype用来扩充所有对象的方法。
try{
//遍历数组的每一项 ,记录当前遍历的元素位置
this.i || (this.i=0); //局部临时变量最好加在对象上,不要写var i = 0;给数组加一个属性,this.i存在就用i不存在就是0,加一个属性并赋值,
//数组长度大于0 && 传递的参数必须为函数
if(this.length >0 && fn.constructor == Function){
while(this.i < this.length){ //不要for in循环,底层循环很多用for循环和while循环,索引不能到长度
var e = this[this.i];
//如果当前元素是一个数组(多维数组)
if(e && e.constructor == Array){//是一个数组的时候,通过constructor判断变量的类型,
//递归
e.each(fn);
} else {
//如果不是数组 (那就是一个单个元素)
//fn.apply(e,[e]);
fn.call(e,e);//fn(e)也可以,也可以fn.call(null,e);回调函数就是函数去执行数组的每一个元素。
}
this.i++ ;
}
this.i = null ; // while循环完了i就没用了,释放内存,垃圾回收机制回收变量
} } catch(ex){
// do something
}
return this ;//谁将要调用这个方法,this就指向谁,现在是arr调用这个方法。
} arr.each(function(item){//先去对象中找方法,然后去原型中找方法,
alert(item);
});
</script>
</head>
<body>
</body>
</html>

js---15,模拟数组的ecah方法的更多相关文章

  1. 从js的repeat方法谈js字符串与数组的扩展方法

    js将字符串重复N次的repeat方法的8个版本 /* *@desc: 将一个字符串重复自身N次 */ //版本1:利用空数组的join方法 function repeat(target, n) { ...

  2. 关于js中操作数组的一些方法

    网上找的通篇看了一遍讲的很透收藏了!  转自(https://www.cnblogs.com/blogs-8888/p/6518683.html) 1.锁定数组的长度(让数组的长度变成只读). 1 2 ...

  3. JS 开发中数组常用的方法

    大家有没有想过,js数组为什么会有这么多的方法,没错,就是为了不同场景下处理数据的需要,就像设计模式一样,都是为了能更好的处理当前场景的需要. 首先怎么创建一个数组呢, // 两种方式 // 1,构造 ...

  4. js中的数组对象排序(方法sort()详细介绍)

    定义和用法 sort() 方法用于对数组的元素进行排序. 语法    arrayObject.sort(sortby) 参数sortby:可选.规定排序顺序.必须是函数. 返回值 对数组的引用.请注意 ...

  5. JS(TS)中数组常见的方法(未完待续)

    push():向数组末尾添加一个或多个元素 unshift(): 向数组的开头添加一个或多个元素 pop(): 删除数组最后一个元素 shift(): 删除数组第一个元素 sort(): 给数组排序  ...

  6. js中给数组添加元素的方法有哪些

    unshift:将参数添加到原数组开头,并返回数组的长度 pop:删除原数组最后一项,并返回删除元素的值:如果数组为空则返回undefined push:将参数添加到原数组末尾,并返回数组的长度 co ...

  7. js中操作数组的一些方法

    增 push   在数组的末尾添加一个或多个元素,并返回新的长度.  array.push(1,2,3.........) unshift  在数组的开头添加一个或多个元素,并返回新的长度. arra ...

  8. js中操作数组的一些方法【转】

    增 push   在数组的末尾添加一个或多个元素,并返回新的长度.  array.push(1,2,3.........) unshift  在数组的开头添加一个或多个元素,并返回新的长度. arra ...

  9. JS 中常见数组API使用方法(join、concat、slice、splice、reverce)

    刚接触前端不久,个人觉得学习程序还是需要经常总结的.下面是我的一些知识的归纳总结,如果哪里说得不对的还请各位大神指点! 1.to str (1)String(arr)将数组中的每个元素转为字符串并用逗 ...

随机推荐

  1. 今日SGU 6.6

    sgu 177 题意:给你一个一开始全是白色的正方形,边长为n,然后问你经过几次染色之后,最后的矩形里面 还剩多少个白色的块 收获:矩形切割,我们可以这么做,离散处理,对于每次染黑的操作,看看后面有没 ...

  2. 【Educational Codeforces Round 37 F】SUM and REPLACE

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 那个D函数它的下降速度是很快的. 也就是说到最后他会很快的变成2或者1 而D(2)==2,D(1)=1 也就是说,几次操作过后很多数 ...

  3. ArcGIS api for javascript——地图配置-定制缩放动画

    描述 本例展示了当用户放大或缩小地图时如何定义地图的动画.zoomDuration和zoomRate是Dojo动画属性,他们确定了动画的duration和帧刷新的rate .这些属性单位是毫秒,zoo ...

  4. CCNP路由实验之十 组播(多播)

                        CCNP路由实验之十 组播(多播) 种方法: 在交换机上配置静态的多播MAC地址到用户接口的映射 使用CGMP.执行CGMP的多播路由器能够将用户发送给自己 ...

  5. sql 向上取整 向下取整 四舍五入的实例;

    SELECT CEILING(23.5/4)'向上取整' ---6 :SELECT FLOOR(23.5/4)'向下取整' ---5 :SELECT ROUND(23.5/4,1)'四舍五入' --5 ...

  6. Android中Service的一个Demo例子

    Android中Service的一个Demo例子  Service组件是Android系统重要的一部分,网上看了代码,很简单,但要想熟练使用还是需要Coding.  本文,主要贴代码,不对Servic ...

  7. HDU——T 1556 Color the ball

    http://acm.hdu.edu.cn/showproblem.php?pid=1556 Time Limit: 9000/3000 MS (Java/Others)    Memory Limi ...

  8. HDU 5384 Danganronpa (AC自己主动机模板题)

    题意:给出n个文本和m个模板.求每一个文本中全部模板出现的总次数. 思路:Trie树权值记录每一个模板的个数.对于每一个文本跑一边find就可以. #include<cstdio> #in ...

  9. FocusChange-焦点变化监听事件

    想要监听一个控件的焦点变化情况,发现了一个 view.setOnFocusChangeListener(new OnFocusChangeListener() { ...... } 现在写一个小dem ...

  10. html ---- a 标签 在新窗口打开的问题