Fork me on GitHub

jQuery原理系列-工具函数

jquery源码中有很多精妙的实现,对于我们每天都在使用的东西,一定要知其原理,如果遇到不能使用jquery环境,也能自己封装原生的代码实现。

1.检测类型

众所周知typeof 不能用来检测数据,会返回object,而instanceof和constructor在使用跨页面调用时(iframe子页面调用父页面),两个页面的构造器函数引用不相等会判断不准确。

而Object对象原型中的toString方法隐藏了这个实现,把它挖掘出来:

Object.prototype.toString.call(obj).replace(/^\[object (.+)\]$/, '$1').toLowerCase();

 

2.extend扩展对象

最简单的是用for..in遍历一下A对象,赋值给B对象,不过jquery的extend可以传无限多个参数进行合并,自然是用到了arguments对象

var extend = function(out) {

out = out || {};

for (var i = 1; i < arguments.length; i++) {
if (!arguments[i])
continue;

for (var key in arguments[i]) {
if (arguments[i].hasOwnProperty(key))
out[key] = arguments[i][key];
}
}

return out;
};

extend({}, objA, objB);

 

3.数组的一些工具方法

1)makeArray :可以用Array.prototype.concat.call(obj);

2) each:可以用es5的forEach,兼容低IE就自己for循环了

3) grep:用es5的filter实现

4) inArray:用es5的indexOf实现

 

posted @ 2016-02-03 13:42  枫之物语  阅读(189)  评论(0编辑  收藏  举报