jQuery中提供/封装了许多工具类的方法,个人认为比较重要的有:

parseJSON方法:

    parseJSON: function( data ) {//只处理字符串数据if ( typeof data !== "string" || !data ) {return null;}// Make sure leading/trailing whitespace is removed (IE can't handle it)data = jQuery.trim( data );// 优先使用本地方法处理,很多现代浏览器中提供了JSON对象用于处理JSON(比如chrome)// Attempt to parse using the native JSON parser firstif ( window.JSON && window.JSON.parse ) {return window.JSON.parse( data );}// Make sure the incoming data is actual JSON// Logic borrowed from http://json.org/json2.jsif ( rvalidchars.test( data.replace( rvalidescape, "@" ).replace( rvalidtokens, "]" ).replace( rvalidbraces, "")) ) {//此句话等效于return eval("("+data+")");//但是这样写能防止变量污染//更多的功效是提供一些编译优化以及工具验证//参见 http://stackoverflow.com/questions/2449220/jquery-uses-new-functionreturn-data-instead-of-evaldata-to-parse-jreturn (new Function( "return " + data ))();}//error方法的实现十分简单,抛出一个msg就完了jQuery.error( "Invalid JSON: " + data );}, 

parseXML方法:

   // parseXML 几乎没什么好说的。就是简单地调用内置对象来解析XML。// Cross-browser xml parsing// (xml & tmp used internally)parseXML: function( data , xml , tmp ) {if ( window.DOMParser ) { // Standardtmp = new DOMParser();xml = tmp.parseFromString( data , "text/xml" );} else { // IExml = new ActiveXObject( "Microsoft.XMLDOM" );xml.async = "false";xml.loadXML( data );}tmp = xml.documentElement;if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) {jQuery.error( "Invalid XML: " + data );}return xml;}, 

globalEval方法:

 //该方法作用域为全局环境,一般用来加载外部脚本globalEval: function( data ) {if ( data && rnotwhite.test( data ) ) {// execScript 为IE专有,其执行环境为global// 更多参见 http://www.cnblogs.com/snandy/archive/2011/03/16/1986055.html// We use execScript on Internet Explorer// We use an anonymous function so that context is window// rather than jQuery in Firefox( window.execScript || function( data ) {window[ "eval" ].call( window, data );} )( data );}}, 

proxy方法:

    //在文档中可以清晰看到proxy支持两种调用方式://jQuery.proxy( function, context ) 和 jQuery.proxy( context, name )proxy: function( fn, context ) {if ( typeof context === "string" ) { //这里对应jQuery.proxy( context, name )var tmp = fn[ context ];context = fn;fn = tmp;}// Quick check to determine if target is callable, in the spec// this throws a TypeError, but we will just return undefined.if ( !jQuery.isFunction( fn ) ) {return undefined;}// Simulated bindvar args = slice.call( arguments, 2 ),proxy = function() {return fn.apply( context, args.concat( slice.call( arguments ) ) );};// 为原始函数设置guid,以便我们可以移除用proxy绑定的事件。// Set the guid of unique handler to the same of original handler, so it can be removedproxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;return proxy;}, 

可能最后一个guid不太容易理解其用意,我们用下面一个简单的示例来说明:

  var obj = {name : 'obj',method : function (){alert(this.name);}}$("input#btn").click($.proxy(obj.method,window)).unbind('click',obj.method); 

此时unbind是可以取消obj.method的绑定的,至于其具体实现,留至看事件处理代码时再做分析。

其他还有一些方法诸如trim,noop,inArray等的实现就比较简单了,在此就不一一分析了,源码中应该是一眼就能看明白的,至此,core.js的分析告一段落。

转载于:https://www.cnblogs.com/firstdream/archive/2012/02/08/2342755.html

jQuery 1.6 源码学习(七)——core.js[7]之实用工具方法(Utilities)相关推荐

  1. jQuery 1.6 源码学习(六)——core.js[6]之jQuery对象/数组操作相关方法

    本文将分析jQuery对象操作相关方法(包括静态和实例方法): merge方法,代码如下: //此方法用于合并两个jQuery对象(因为jQuery对象中有length属性)或者数组,//这个方法非常 ...

  2. (转载)jQuery 1.6 源码学习(一)——core.js[1]之基本架构

    在网上下了一个jQuery 1.2.6的源码分析教程,看得似懂非懂,于是还是去github上下载源码,然后慢慢看源代码学习,首先来说说core.js这个核心文件吧. jQuery整体的基本架构说起来也 ...

  3. Java多线程之JUC包:Semaphore源码学习笔记

    若有不正之处请多多谅解,并欢迎批评指正. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.com/go2sea/p/5625536.html Semaphore是JUC ...

  4. jQuery源码学习之Callbacks

    jQuery源码学习之Callbacks jQuery的ajax.deferred通过回调实现异步,其实现核心是Callbacks. 使用方法 使用首先要先新建一个实例对象.创建时可以传入参数flag ...

  5. ASP.NET Core 源码学习之 Logging[2]:Configure

    在上一章中,我们对 ASP.NET Logging 系统做了一个整体的介绍,而在本章中则开始从最基本的配置开始,逐步深入到源码当中去. 默认配置 在 ASP.NET Core 2.0 中,对默认配置做 ...

  6. ASP.NET Core 源码学习之Logging[1]:Introduction

    在ASP.NET 4.X中,我们通常使用 log4net, NLog 等来记录日志,但是当我们引用的一些第三方类库使用不同的日志框架时,就比较混乱了.而在 ASP.Net Core 中内置了日志系统, ...

  7. ASP.NET Core 源码学习之 Options[4]:IOptionsMonitor

    前面我们讲到 IOptions 和 IOptionsSnapshot,他们两个最大的区别便是前者注册的是单例模式,后者注册的是 Scope 模式.而 IOptionsMonitor 则要求配置源必须是 ...

  8. ASP.NET Core 源码学习之 Options[3]:IOptionsSnapshot

    2017-06-28 更新: OptionsSnapshot 已改为 OptionsManager 变更详情 IOptionsCache 已改为 IOptionsMonitorCache 变更详情 在 ...

  9. ASP.NET Core 源码学习之 Options[2]:IOptions

    在 上一篇 中,介绍了一下Options的注册,而使用时只需要注入 IOption 即可: public ValuesController(IOptions<MyOptions> opti ...

  10. ASP.NET Core MVC 源码学习:MVC 启动流程详解

    前言 在 上一篇 文章中,我们学习了 ASP.NET Core MVC 的路由模块,那么在本篇文章中,主要是对 ASP.NET Core MVC 启动流程的一个学习. ASP.NET Core 是新一 ...

最新文章

  1. Ubuntu下安装中文输入法(本文安装的搜狗输入法)
  2. 在log4j中使用自定义的Appender
  3. IBM X System ServerGuide 8.41 服务器 系统安装 引导盘
  4. android webview url scheme,Android Webview ERR_UNKNOWN_URL_SCHEME错误
  5. SQLite_Android
  6. JQuery jsonp使用小记
  7. 低学历、文科出身,我如何从月薪不到 3000 逆袭为大厂高薪程序员?
  8. 【渝粤教育】电大中专新媒体营销实务 (14)作业 题库
  9. 常用ajax调用方法,web前端之4种常用的Ajax请求方式
  10. bcrypt加密工具
  11. 历时一年 Apache Spark 3.3.0 正式发布,新特性详解
  12. O2O供应链系统架构设计
  13. 第三阶段应用层——1.7 数码相册—电子书(3)—轮询方式支持多输入
  14. ZOJ - 3939(日期规律)
  15. 读书笔记5 《精进:如何成为一个很厉害的人》 采铜
  16. android 的Zygote 分析
  17. Quartz 实现画图片、写文字、画线、椭圆、矩形、棱形等。
  18. GPS 车辆导航定位的应用前景
  19. ajax 的前因后果 以及优缺点
  20. Springboot+vue整合

热门文章

  1. android实现qq登录功能实现原理,Android实现QQ登录功能
  2. python中用来占位的语句是_MySQL / Python-gt;语句中占位符的语法错误?
  3. java 补位_Java 经典问题
  4. access insert语句怎么写_被缠上了,小王问我怎么在 Spring Boot 中使用 JDBC 连接 MySQL
  5. SpringMVC之安全性(三)Twitter登入
  6. 【渝粤教育】电大中专学前儿童社会教育作业 题库
  7. 【渝粤题库】陕西师范大学152201 公共行政学
  8. 图论——两道并查集例题
  9. service下载任务
  10. 2种方式(线程间通信/互斥锁)实现两个线程,一个线程打印1-52,另一个线程打印字母A-Z,打印顺序为12A34B56C......5152Z...