cocos2d JS 源生js实现each方法
javascript笔记——源生js实现each方法
出处:http://www.lovejavascript.com/#!zone/blog/content.html?id=48
jquery里面有个each方法,将循环操作简化、便捷。
随后es出了个forEach方法,两个虽然用法相近,但是不能处理对象类型。且无法通过return true达到continue效果。
此外还有个every方法,该方法虽然可以实现continue效果,但是在处理类数组与对象类型时,完全无用。
在不使用jquery的each方法时,该如何处理;或者说用原生如何来实现?我在GridManager.js中集成了该方法,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
// 通过字面量方式实现的函数each
var each = function (object, callback){
var type = ( function (){
switch (object.constructor){
case Object:
return 'Object' ;
break ;
case Array:
return 'Array' ;
break ;
case NodeList:
return 'NodeList' ;
break ;
default :
return 'null' ;
break ;
}
})();
// 为数组或类数组时, 返回: index, value
if (type === 'Array' || type === 'NodeList' ){
// 由于存在类数组NodeList, 所以不能直接调用every方法
[].every.call(object, function (v, i){
return callback.call(v, i, v) === false ? false : true ;
});
}
// 为对象格式时,返回:key, value
else if (type === 'Object' ){
for ( var i in object){
if (callback.call(object[i], i, object[i]) === false ){
break ;
}
}
}
}
|
我们来try一下, 测试下数组、对象、类数组类型及中断效果
数组类型:
1
2
3
4
|
var _array = [1,2,3,4];
each(_array, function (i, v){
console.log(i + ': ' + v);
});
|
输出如下:
对象类型:
1
2
3
4
|
var object = {a:1, b:2, c:3}
each(object, function (i, v){
console.log(i + ': ' + v);
});
|
输出如下:
类数组类型 :
1
2
3
4
|
var ele = document.querySelectorAll( 'div' );
each(ele, function (i, v){
console.log(i + ': ' + v);
});
|
输出如下:
增加中断条件:
1
2
3
4
5
6
7
8
9
10
11
12
|
var object2 = {name: 'baukh' , age: '29' , six: '男' , url: 'www.lovejavascript.com' ,}
each(object2, function (i, v){
if (i === 'age' ){ //如果存在键值为age的属性时,则输出警告,用于实现continue效果
console.log( '存在键值为age,这家伙已经' +v+ '岁了' );
return true ;
}
if (i === 'six' && v === '男' ){ //如果存在键值为age的属性时,则输出跳出,用于实现break效果
console.log( '存在键值为six,是个男的,不用关注了~' );
return false ;
}
console.log(i + ': ' + v);
});
|
输出如下:
从结果可以看出来,each方法已经实现了jquery的each功能。且实现如此简单~
cocos2d JS 源生js实现each方法相关推荐
- 源生的html属性js,源生JS怎样实现todolist功能
这次给大家带来源生JS怎样实现todolist功能,源生JS实现todolist功能的注意事项有哪些,下面就是实战案例,一起来看一下. 该项目主要可以练习js操控dom,事件,事件触发之间的逻辑关系, ...
- 源生ajax同步异步请求,源生JS怎样实现文件异步上传
这次给大家带来源生JS怎样实现文件异步上传,源生JS实现文件异步上传的注意事项有哪些,下面就是实战案例,一起来看一下. 名称 文件 确定 function ajaxUploadFile() { var ...
- 前端 纯源生js 数字流(全代码)
纯源生js代码 书写数字流 <!DOCTYPE html> <html lang="zh"><head><meta charset=&qu ...
- php 随机数 抽奖 页面,源生JS做出抽奖页面
这次给大家带来源生JS做出抽奖页面,源生JS做出抽奖页面的注意事项有哪些,下面就是实战案例,一起来看一下. 效果图: 图片素材 : 代码如下,复制即可使用: 幸运抽奖页面 /*CSS代码*/ *{ p ...
- iOS与JS交互的4种方法
iOS与JS交互的方法: 1.拦截url(适用于UIWebView和WKWebView) 2.JavaScriptCore(只适用于UIWebView,iOS7+) 3.WKScriptMessage ...
- c js html页面进度条,js实现进度条的方法
本文实例讲述了js实现进度条的方法.分享给大家供大家参考.具体实现方法如下: 1.setTimeout和clearTimeout 进度条 .container{ width:450px; border ...
- js中match、replace方法中使用正则表达式
为什么80%的码农都做不了架构师?>>> js中match.replace方法中使用正则表达式 (2012-06-29 14:23:37) 转载▼ 标签: 字符串 飞雪 正则表 ...
- [转]Asp.net 将js文件打包进dll 方法
Asp.net 将js文件打包进dll 方法 注:本文基于.NET 2.0 和 VS2005 我们在编写 Server Control 的时候难免要用到一些客户端脚本(javascript),如何把脚 ...
- .NET 调用JS:WebBrowser.Document.InvokeScript 方法抛出“指定的转换无效”异常的原因
.NET 调用JS:WebBrowser.Document.InvokeScript 方法抛出"指定的转换无效"异常的原因 参考文章: (1).NET 调用JS:WebBrowse ...
最新文章
- 美多商城之商品(商品数据库表设计)
- 如何降低QPS(错峰、限流、削峰)
- linux gdb#039;查找寄存器地址,【Linux跟踪和调试】gdb
- 史上最NB程序员的自白
- fedora 22 安装 flash player
- 固定 顶部_抗拉固定球铰支座优点与施工步骤
- 34. Differentiate between inheritance of interface and inheritance ofimplementations
- java开发steam平台_stma(steam平台)
- 【Appdata】appdata文件夹太大,移动到D盘。
- pwn基础之ctfwiki-栈溢出-基本ROP-ret2text
- luci网页shell_LUCI 使用其原有机制的建立新的页面
- OV7725摄像头显示VGA/LCD
- Java接口的定义、使用及成员特点
- 如何在Oracle数据库中使用dbms_output输出内容
- 中国卸油系统行业市场供需与战略研究报告
- 程序卡住了?教你如何调试已在运行的程序
- [Copy] Netlink Socket
- 修改office正版验证(测试通过)
- HTML5期末大作业:关于家乡景点介绍主题——上海介绍(5页) HTML+CSS+JavaScript 大二实训HTML作业...
- Android开发之Audio播放:竞争Audio之Audio Focus的应用
热门文章
- excel自定义函数添加和使用方法
- django 1.8 官方文档翻译: 2-5-1 管理器
- Corosync与Pacemaker实现nfs作为共享存储的MySQL高可用
- lighttpd 之防盗链
- 第六次作业--结对编程第二次
- Selenium Firefox 官方Webdriver -- Geckodriver 下载地址
- Android - 返回上一个界面finish()方法
- linux shell中的单引号与双引号的区别(看完就不会有引号的疑问了)(转)
- 使用模板部署的Linux虚拟机网卡不可用的处理方法
- GridView自带的分页功能的实现