zepto 源码分析2 - 编码技巧 & 函数实现
2017-10-31 14:07
465 查看
编码技巧
全局对象属性转换成临时变量,提高读取效率document = window.document
采用 call 保证类型与方法一致
// zepto var emptyArray = [] $.inArray = function(elem, array, i){ return emptyArray.indexOf.call(array, elem, i) } // 原生 $.inArray = function(elem, array, i){ // 此时如果 array 不是 数组类型,则会报错: // array.indexOf is not a function return array.indexOf(elem, i) }
判断变量可能的值
/complete|loaded|interactive/.test(document.readyState) // 简洁高效 // 常规写法 document.readyState=='complete' || document.readyState=='loaded' || document.readyState=='interactive'
函数实现
$.map
& $.each
对原生 map & forEach 的拓展,使支持对象$.map 会过滤 null 值
$.map 支持类数组对象,如函数中的 arguments
$.each 在返回值为 false 时,能中止数组遍历
数组去重
var uniq = function (array){ return filter.call(array, function (item, idx) { return array.indexOf(item) == idx }) }
深拷贝
递归实现按需初始化类型
function extend(target, source, deep) { for (key in source) if (deep && (isPlainObject(source[key]) || isArray(source[key]))) { if (isPlainObject(source[key]) && !isPlainObject(target[key])) target[key] = {} if (isArray(source[key]) && !isArray(target[key])) target[key] = [] extend(target[key], source[key], deep) } else if (source[key] !== undefined) target[key 4000 ] = source[key] }
获取元素的宽高
计算 window 宽高用 innerWidth / innerHeight计算 document 宽高用 scrollWidth / scrollHeight
其他元素:getBoundingClientRect,返回数值对象包含left、top、right和bottom,单位为 px
['width', 'height'].forEach(function(dimension){ var dimensionProperty = dimension.replace(/./, function(m){ return m[0].toUpperCase() }) $.fn[dimension] = function(value){ var offset, el = this[0] if (value === undefined) return isWindow(el) ? el['inner' + dimensionProperty] : isDocument(el) ? el.documentElement['scroll' + dimensionProperty] : (offset = this.offset()) && offset[dimension] else return this.each(function(idx){ el = $(this) el.css(dimension, funcArg(this, value, idx, el[dimension]())) }) } })
相关文章推荐
- Linux内核源码分析--内存管理(二、函数实现技巧)
- Linux内核源码分析--内存管理(二、函数实现技巧)
- R语言金融数据分析 – 二条均线打天下 中没有给出源码的几个函数的个人实现
- MINA源码分析---协议编码输出接口ProtocolEncoderOutput及其实现
- Integer中的相关函数实现源码分析
- Android 获取Root权限之后的静默安装实现 代码示例分析&&源码下载
- Android屏幕截图实现方式 & 系统截屏源码分析和三指截屏
- Android View系统源码分析(四)—— 各种消息监测的基本实现方法&View.dispatchTouchEvent()
- InnoDB Rollback Segment & Undo Page Deallocation实现源码分析
- JNI实现源码分析【四 函数调用】
- linux epoll模型源码分析 一 函数实现
- 可变参数列表实现机制与printf()函数源码分析
- JVM:锁实现(synchronized&JSR166)行为分析和相关源码
- Zepto源码分析(二)奇淫技巧总结
- PHP strtotime函数用法、实现原理和源码分析
- C#中Stack<T>类的使用及部分成员函数的源码分析
- Android 获取Root权限之后的静默安装实现 代码示例分析&&源码下载
- 【OVS2.5.0源码分析】vlan&trunk实现原理分析(2)
- 【OVS2.5.0源码分析】vlan&trunk实现原理分析(1)
- Zepto源码分析(1)——类型判断函数