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实现

jQuery原理系列-工具函数的更多相关文章

  1. JQuery中的工具函数总结

    前提引入 前提当然也是要引入Jquery啦... <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js" typ ...

  2. jQuery基础(工具函数,浏览器信息,检测节点,字符串,$.extend())

    1.获取浏览器的名称与版本信息   在jQuery中,通过$.browser对象可以获取浏览器的名称和版本信息 如$.browser.chrome为true,表示当前为Chrome浏览器, $.bro ...

  3. JQuery实践--实用工具函数

    实用工具函数,$命名空间的一系列函数,但不操作包装集.它要么操作除DOM元素以外的Javascript对象,要么执行一些非对象相关的操作. JQuery的浏览器检测标志可在任何就绪处理程序执行之前使用 ...

  4. jQuery原理系列-常用Dom操作

    1. 事件绑定$(el).bind ie使用attachEvent,其它浏览器使用addEventListener,不同的是ie多了个on前缀,this绑定在window上,需要用call和apply ...

  5. jquery中的工具函数 Utilities

    noConflict(deep) 释放$和Jquery的控制权 isFunction(obj) isArray(obj) isWindow(obj) isNumeric(obj) type(obj) ...

  6. jQuery原理系列-css选择器实现

    jQuery最强大的功能在于它可以通过css选择器查找元素,它的源码中有一半是sizzle css选择器引擎的代码,在html5规范出来之后,增加了document.querySelector和doc ...

  7. jQuery原理系列-Dom Ready

    ready事件是jquery的一个很重要的功能,在很久很久以前,我们是使用window.onload监听页面加载成功的,onload事件的好处是你不用考虑浏览器兼容性,也不需要依赖任何框架就可以写,但 ...

  8. jQuery实用工具函数

    1. 什么是工具函数 在jQuery中,工具函数是指直接依附于jQuery对象.针对jquery对象本身定义的说法,即全局性的函数,我们统称为工具函数,或Utilities函数.它们有一个明显的特征, ...

  9. 从零开始学习jQuery (九) jQuery工具函数

    一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案,  即使你会使用jQuery也能在阅读中发现些许秘籍. 我们经常要使用脚本处理各种业务逻辑, 最常见的就 ...

随机推荐

  1. JavaScript图形实例:正多边形

    圆心位于坐标原点,半径为R的圆的参数方程为 X=R*COS(θ) Y=R*SIN(θ) 在圆上取N个等分点,将这N个点首尾连接N条边,可以得到一个正N边形. 1.正多边形阵列 构造一个8行8列的正N( ...

  2. target信息异常

    当工程的编译target信息异常的时候,可以删除YourProjectName.xcodedeprij/xcuserdate目录. 该目录存有当前用户的各种工程状态信息,删除后重启Xcode,Xcod ...

  3. 初始化加载和导航时脚本执行的函数(初始化脚本执行环境)page.evaluateOnNewDocument

    /** * Copyright 2017 Google Inc., PhantomJS Authors All rights reserved. * * Licensed under the Apac ...

  4. importlib 与__import__的区别

    importlib 与__import__的区别 importlib import importlib name = "lib.test" # lib.test指的是lib路劲下的 ...

  5. java并发(一):初探线程的创建

    线程的创建两种方式 创建线程有四种方式,今天主要演示的是两种:继承Thread,实现Runable接口 继承Thread创建线程 import lombok.extern.slf4j.Slf4j; @ ...

  6. JS 函数创建、封装、调用

    一.简单函数创建.封装 第三种就是构造函数 function fun(a,b){ this.firstName=a this.lastName=b } var x=new myFun(Jhon,Dav ...

  7. 《算法图解》[美] Aditya Bhargava(作者)epub+mobi

    内容简介 本书示例丰富,图文并茂,以让人容易理解的方式阐释了算法,旨在帮助程序员在日常项目中更好地发挥算法的能量.书中的前三章将帮助你打下基础,带你学习二分查找.大O表示法.两种基本的数据结构以及递归 ...

  8. Python栈溢出【新手必学】

    python3.5.4 递归函数最恶心的时候莫非栈溢出(Stack overflow).PS:另外很多人在学习Python的过程中,往往因为没有好的教程或者没人指导从而导致自己容易放弃,为此我建了个P ...

  9. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:关闭图标

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  10. NO28 第四关考试题

    第4章 第4周课前测试考试题 4.1 定时任务规则的含义01 第1题 如果在某用户的crontab文件中有以下记录,该行中的命令多久执行一次(RHCE考试题)?(  ) 30 4 * * 3 mycm ...