- 浏览: 2614916 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1286)
- js-oop (2)
- js-window (10)
- js-event (19)
- js-string (37)
- js-array (27)
- js-page (4)
- js-dom (62)
- js-lang (8)
- js-number (7)
- js-platform (3)
- js-object (15)
- js-element (3)
- js-browser (7)
- js-url (6)
- js-date (10)
- css基础 (48)
- css优化 (15)
- html基础 (17)
- html标签 (19)
- js基础 (117)
- js-兼容性差异 (33)
- js引擎 (3)
- js性能 (14)
- json (6)
- jQuery源码浅析 (43)
- web mobile开发资料 (78)
- js跨域 (2)
- html5 (74)
- html5-canvas (7)
- css3 (53)
- 浏览器 (5)
- api设计学 (3)
- js-加载 (3)
- linux (37)
- 架构师 (1)
- php (2)
- self开发的脚本库--凤凰 (2)
- web应用名词 (6)
- javascript新特性翻译 (8)
- ajax (6)
- jQuery动画效果 (7)
- prototype的解读 (13)
- 优秀插件翻译 (1)
- css解决方案 (26)
- 数据库 (2)
- english daily (59)
- 浏览器内核探究 (1)
- jQuery插件介绍 (9)
- jquery基础篇 (26)
- chrome浏览器问题整理 (14)
- js选择器那些事 (3)
- 前端框架 (26)
- Firefox私有属性 (11)
- webkit私有属性集合 (17)
- 书籍推荐 (21)
- 数据结构 (1)
- 网站建设相关 (7)
- 好文翻译 (2)
- 个人作品 (3)
- kissy的解读 (4)
- css-layout(布局研究) (5)
- less研究 (1)
- YUI探究 (1)
- hash探究 (1)
- js动画 (7)
- 前端面试题 (37)
- css书写规范 (1)
- js模板引擎 (6)
- js模块化 (19)
- 编写高质量代码 (3)
- 性能探究--应用协议 (2)
- 前端图像处理 (19)
- Mac OS相关 (21)
- 正则表达式 (11)
- 离线应用相关 (0)
- 前端工具 (65)
- nodeJS (55)
- jquery优化篇 (2)
- 设计模式探究系列 (3)
- windows7 (2)
- IE10 (10)
- 微博开放平台探究 (2)
- 常用web服务接口 (1)
- 数据存储相关 (8)
- 零时文件 (2)
- jQuery Mobile (16)
- backbone (15)
- underscore (22)
- sass (11)
- android (3)
- phonegap (10)
- IE私有 (11)
- qwrap (8)
- git (14)
- chrome extensions (5)
- freemarker (11)
- angularJS (3)
- seo (2)
- markdown (3)
- css动画 (4)
- 安卓开发 (2)
- React (7)
- 活动页技术 (1)
- 网络安全 (3)
- grunt (7)
- Lo-Dash (3)
- 前端国际化 (4)
- 版本控制 (2)
- 盒模型 (4)
- 微信开发 (1)
- Mock数据工具 (1)
- sails (1)
- vim (1)
- js-color (1)
- iOS 基础 (43)
最新评论
-
jertom:
<div id="showInfo" ...
addEventListener等事件监听的参数细谈 -
乌托邦国王:
引用[u][/u]
css3动画属性系列之transform细讲移动translate -
hvang1988:
能提供附件下载吗,找不到js库,google封了访问不了
Syntaxhighlighter---代码高亮插件介绍 -
sscsacdsadcsd:
我的天 那到底是为什么function是object我看und ...
typeof func ==='function'的疑惑 -
wkjiangwk:
试了,没用,你们从不去测试。
介绍一下x-webkit-speech -------实现语音输入
思考是从jQuery的一段代码开始的。
jQuery.each({ slideDown: genFx("show", 1), slideUp: genFx("hide", 1), slideToggle: genFx("toggle", 1), fadeIn: { opacity: "show" }, fadeOut: { opacity: "hide" } }, function( name, props ) { jQuery.fn[ name ] = function( speed, callback ) { return this.animate( props, speed, callback ); }; });
ps:以前明哥问我想要研究js的那些部分,我当时很自然地说了fx.................
回到正题,我选的代码是1.4.1,其实在JQuery的源码中你会发现很多这样的模式
//1.4.1的版本里面大概是23处地方这样的模式 //当然里面的第一个参数可以是[],{} //下面我就简单地以["bind","one"]举例 jQuery.each(["bind","one"],function(i,name){ //我这就简单地以jQuery.fn举例 jQuery.fn[name] = function(){ ..................... } })
好吧 为了让大家明白,我们先来思考一下这种each的实现。
第一看看jQuery的each实现。
----ps : 这个each不是$().each
/* 一些chm或者在线的手册上会告诉你$.each有两个参数 @param {Object} object ----需要遍历的对象或者数组 @param {Function} callback(可选) ---每一个成员执行的回调 但是你看源码的时候你会发现原来有3个参数 */ each: function( object, callback, args ) { var name, i = 0, //object的length length = object.length, //jQuery.isFunction(object) 判断是否是function isObj = length === undefined || jQuery.isFunction(object); if ( args ) { if ( isObj ) { for ( name in object ) { if ( callback.apply( object[ name ], args ) === false ) { break; } } } else { for ( ; i < length; ) { if ( callback.apply( object[ i++ ], args ) === false ) { break; } } } // A special, fast, case for the most common use of each } else { //一般我们多走这个,因为没有定义args--undefined if ( isObj ) { //for object for ( name in object ) { if ( callback.call( object[ name ], name, object[ name ] ) === false ) { break; } } } else { //for array for ( var value = object[0]; i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {} } } //返回object return object; },
下面先举一个简单的object参数为array的例子
/* 我这边定义的object为array @i是index @n是对应objetc[i] */ $.each( ["a","b","c"], function(i, n){ ( "Item #" + i + ": " + n ); }); //这个jQuery的$.each在处理object为array的时候的源码 //其实就是开始的时候value是object[0] //this的指向!! //如果回调函数返回的不是false的话 value每一次变成 object[++i] //call的时候参数第一个是object[i]对象;第二个是index--i ;第三个是object[i] for ( var value = object[0]; i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {}
再看看处理object为{}的例子
/* 我这边定义的是object为真正的object {} 回调的参数@param i 是key @param n是value */ $.each( { name: "zhangyaochun", age: "24" }, function(i, n){ alert( "Pro: " + i + ", Value: " + n ); }); //我们来看一下jQuery的$.each处理object为{}的时候 for ( name in object ) { //进行for in的循环 //call的第一个参数是object[name] //这个this指向!! //call的第二个参数是name //属性 //call的第三个参数是object[name] //值 //同样如果回调返回的是false就Break if ( callback.call( object[ name ], name, object[ name ] ) === false ) { break; } }
其实这个问题在我研究tangram和自己编写自己的凤凰lib的时候就开始think....
/* *each-traverse a object and follow the iterator to return a obj* *@function* *@param {Object} source* *@param {Function} iterator ---function(item,key)* *@return {Object}* */ ZYC.object.each = function(source,iterator){ var returnValue,key,item; if(typeof iterator == 'function'){ for(key in source){ //加了一层hasOwnProperty if(source.hasOwnProperty(key)){ item = source[key]; //call的时候this指向的是source //然后后面的参数依次是value和key returnValue = iterator.call(source,item,key); } //如果有返回值是false的话就break if(returnValue === false){ break; } } } return source; };
最后还是讲一下自己的收获:思考的是一些api实现和动态扩展创建命名空间下的fn的方式,从而结合去编写改善自己的api实现方式
我在扩展我的fn的时候也参照了这样$.each的模式,动态的去扩展一下phoenix.fn[key]
发表评论
-
介绍jquery事件的一种内部写法
2013-03-25 20:00 2045注释:本文不探究jquery event机制, ... -
jquery add详解
2013-03-19 18:40 0add:function(elem,types, ... -
jquery事件系统解耦之一
2013-03-19 17:43 0先上代码:http://code.jqu ... -
jquery api之camelCase
2013-03-12 11:36 1220本代码取之:1.4.3版本(才开始有) ... -
jq的选择器流程之二
2013-01-28 16:45 0前面简单些了一篇《jq的选择器流程分析开篇》,本文关注1. ... -
jq的选择器流程分析开篇
2013-01-28 14:17 1729本文简单地分析以下jquery的选择器流程: 为了 ... -
jquery Sizzle系列之filters
2013-01-28 12:16 1729本代码来自1.7.1版本。 jQuery.expr ... -
event.isDefaultPrevented
2013-01-14 12:18 1650jQuery 1.3版本开始引入了一个这个 ... -
jQuery相关的boxModel
2012-12-21 20:58 1588此方法比较简单,但是 ... -
深入解读jquery的数据存储相关(data)序3
2012-12-19 18:27 2229前言: 上一篇: 深入解读jquery的数 ... -
深入解读jquery的数据存储相关(data)序3
2012-12-19 18:26 1本文关注一下jQuery1.4版本: 主要的变化: ... -
深入解读jquery的数据存储相关(data)序2
2012-12-18 11:03 1820前言: 先回顾一下上一篇:深入解读jquery ... -
深入解读jquery的数据存储相关(data)序2
2012-12-18 11:00 3前言: 先回顾一下 ... -
深入解读jquery的数据存储相关(data)开篇
2012-12-17 20:43 1991前言: 周六看了司徒的一篇文章,觉得这个top ... -
深入解读jquery的数据存储相关(data)开篇
2012-12-17 20:29 2前言: 周六看了司徒的一篇文章,觉得这个topic不 ... -
IE下删除自定义属性的兼容性问题
2012-12-17 10:02 2855很多时候我们会给某个dom元素赋予一些自定义的属 ... -
jquery ajax的各个事件执行顺序
2012-09-17 15:39 1575关于ajax的一些配置事件的触发顺序做了一些总结: ... -
获取head元素
2012-09-17 15:21 1881先上一段jquery 1.7.1版本的代码片段: ... -
jQuery源码浅谈系列---contents
2012-06-30 17:14 1433contents() ----- ... -
jQuery源码浅谈系列---end
2012-06-30 16:50 1453end() ------ 回到最近的一个“破 ...
相关推荐
这部分训练旨在提升学生的阅读理解能力,理解气候变化如何影响生物种群,并通过具体的实例引导学生思考环境问题。 总的来说,这个单元的训练涵盖了从基础语法到实际应用的多个层面,旨在帮助学生在高考中取得更好的...
本教程集合了关于JMeter的全面操作和使用技巧,旨在帮助用户深入了解并熟练掌握其功能。以下将详细阐述JMeter的基本概念、主要组件以及如何利用它进行接口测试,特别关注"for_each"控制器的运用。 1. **JMeter基础*...
- 相互学习,竞争(Learning from each other and competing with each other) 此外,PPT还提出了一个问题,朋友是否必须是人?什么还可以成为你的朋友?这鼓励学生开阔思维,理解友情的多元性。 然后,PPT引入了...
Bruce则尚未决定想去哪所学校,有时间进一步思考(未给出选项)。 通过这些对话,我们可以看出考试重点在于理解日常对话中的语境、逻辑关系以及恰当的选择填空。考生需要具备理解对话上下文、推断人物意图和情感的...
接着,课件通过配对练习(Match each thing with a place in the picture)来让学生熟悉不同地方可以做什么,例如在邮局买邮票、在银行存钱、在书店买书等,这有助于学生将实际场景与英语词汇相结合,增强他们的语境...
从这些心得中,我们可以提炼出一些关键的Java编程知识点。 首先,面向对象编程(OOP)是Java的核心概念。"Everything is an object",即万物皆对象,意味着每个实体都可以被封装成一个对象,包含了处理该实体所需的...
3. 完形填空继续:这个故事可能引导学生思考父女之间的互动和亲情,同时也考察了学生对于上下文线索的理解和推理能力,如第11题的选项可能包括paper, usual, special等,第12题的选项可能包括all, both, each等。...
#### 五、扩展思考 除了基本的视频分帧和保存功能外,还可以考虑进一步扩展功能,例如: - 对图片进行压缩以减少存储空间占用。 - 添加多线程或多进程支持以提高处理效率。 - 使用更复杂的图像处理技术(如边缘检测...
4. These characteristics combine in unique ways in each person, forming various personality types, each composed of different internal workings and external functions. - 这句话揭示了个体差异和个性形成...
17. **卡通时间的游戏与思考**:`play a game`、`tell a story`、`each student`、`on the mountain`、`think hard` 等是描述故事情境的常用短语。 18. **语法:一般过去时**: - 一般过去时用于表示过去发生的...
以下是一些关于如何提高高考英语书面表达分数的关键知识点: 1. **高级词汇与句型的运用**:高考评分标准鼓励学生使用高级词汇和复杂句式。例如,在环保话题中,可以使用"pollution"、"global warming"、...
### ACM 2013成都赛试题:游戏在医院(AGameintheHospital) #### 背景 在2013年的ACM国际大学生程序设计竞赛亚洲区域赛...此类问题的解答往往需要深度的逻辑思考和严密的数学证明,体现了ACM竞赛的高难度和综合性。
单复数混淆,如"Each character pronounced as one syllable."应修正为"Each character is pronounced as one syllable."此外,有些教师会使用中文式英语,如"Read together.",更恰当的表达应为"Read it together....
本文将深入探讨这一方法,并提供一些实践建议。 首先,我们要明白,语言是用来交流的工具,只有真正地运用它,才能更好地掌握。在不同国家,人们有着不同的问候方式,比如握手、鞠躬、拥抱或亲吻脸颊。当我们学习到...
- 充分利用:make full use of / take advantage of, 适当利用:make proper use of, 互相学习:learn from each other - 给予帮助:help sb. with sth., help sb. (to) do sth., 在某人的帮助下:with the help ...
以下是一些精选的英语毕业留言祝愿语: 1. "Life is a profound book. Others' notes cannot replace your own understanding. May you find and create something new in it." 这句话鼓励毕业生独立思考,不要依赖...
” 这个问题旨在引导学生思考不同文化背景下饮食习惯的差异,并注意到“for the first time”作为时间状语的用法,它强调的是初次体验。 接着,课件通过实例介绍了一些可能让外国人感到惊讶的中国饮食习惯,如孩子...
在课堂活动的第一阶段,教师引导学生思考并列举他们所知道的节日,例如端午节(Dragon Boat Festival)、重阳节(Chongyang Festival)和中秋节(Mid-autumn Festival)。 接着,课程介绍了春节期间的一些习俗。在...
- `Players move towards one end of the court while throwing the ball to each other.`:球员们一边将球传给对方,一边向球场的另一端移动。 3. **语法点:一般过去时的被动语态**: 一般过去时的被动语态用于...
1. 故事教育意义:这个小学英语故事《ASingle_logBridge》通过两只固执的山羊的故事,教育孩子们关于谦让和合作的重要性。故事中的两只山羊因为互不相让而导致了悲剧的发生,提醒孩子们在面对冲突时,应该学会互相...