博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jQuery源码学习之七 (jQuery中扩展方法)
阅读量:5068 次
发布时间:2019-06-12

本文共 2904 字,大约阅读时间需要 9 分钟。

接下来分析扩展到 jQuery 的方法

jQuery.extend({     ...    isFunction:判断传入的是否是函数,      isArray:判断传入的是否是数组,   isWindow:判断传入的是否是window对象,   isNumeric:判断传入的是否是num,   type:判断传入参数的类型,   isPlainObject:,   isEmptyObject:参数是否是空对象,   error:抛出错误,    ...   })
isFunction:内部调用$.type()
isFunction: function( obj ) {		return jQuery.type(obj) === "function";	},
isArray::新版本js自带的方法Array.isArray
isArray: Array.isArray,
isWindow:window的
window属性等价于 window的self 属性,它包含了对窗口自身的引用
isWindow: function( obj ) {		return obj != null && obj === obj.window;	}

isNumeric:利用 typeof 验证NaN返回的是仍是number,所以没有用 typeof

isNumeric: function( obj ) {		return !isNaN( parseFloat(obj) ) && isFinite( obj );	},
type:

1、判断null==null 或者undefined==null都会返回true。

2、typeof(null) 返回的是object;typeof(undefined)可以得到字符串 “undefined”;

3、String(obj) 首先会看obj有没有toString()方法,有的话直接调用。而没有toString方法的只有null 和undefined,则返回相应的null和undefined。

综上看出 type()方法中的if中返回的是字符串形式的 null 或者 undefined。

一般判断null会用到“===”,而判断undefined会用到typeof ;

注:某些低版本浏览器 typeof 正则的时候会返回“function”

当参数obj是number或string的时候直接返回 typeof obj;否则等于class2type[ core_toString.call(obj) ]

class2type = {},... core_toString = class2type.toString,...jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {    class2type[ "[object " + name + "]" ] = name.toLowerCase();});...type: function( obj ) {		if ( obj == null ) {			return String( obj );		}		// Support: Safari <= 5.1 (functionish RegExp)		return typeof obj === "object" || typeof obj === "function" ?			class2type[ core_toString.call(obj) ] || "object" :			typeof obj;	}

Object.prototype.toString.call(obj)  等价于 {}.toString.call(obj)  经常用来判断传入的obj的类型,这里也用到了。

class2type中的下标对应的是Object.prototype.toString.call(obj)的不同类型的返回值。

jQuery 巧妙的将类型存入到数组class2type中,最后得到的class2type:

class2type[[object Boolean]] = "boolean"class2type[[object Number]] = "number"class2type[[object String]] = "string"class2type[[object Funtion]] = "funtion"class2type[[object Array]] = "array"class2type[[object Date]] = "date"class2type[[object RegExp]] = "regexp"class2type[[object Object]] = "object"class2type[[object Error]] = "error"

isPlainObject:

if 判断排除了DOM节点 window对象以及$.type 返回的不是object的情况。

try catch 中if判断的根据是只有Objectd的prototype中才有自带的“isPrototypeOf”属性

class2type = {},...core_hasOwn = class2type.hasOwnProperty,...isPlainObject: function( obj ) {   if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {      return false;   }   try {      if ( obj.constructor && !core_hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {        return false;       }     } catch ( e ) {        return false;      }    return true;  },

 
isEmptyObject:js自带的属性for in不到

isEmptyObject: function( obj ) {		var name;		for ( name in obj ) {			return false;		}		return true;	},
error:调用js原生的throw new Error();

error: function( msg ) {		throw new Error( msg );	},

转载于:https://www.cnblogs.com/hdchangchang/p/3965315.html

你可能感兴趣的文章
开始学习ExtJs,认识ExtJs开发包
查看>>
erlang shell 命令中文使用手册
查看>>
关于取余
查看>>
[整]Android开发优化-布局优化
查看>>
编程三大核心内容之一:数据处理
查看>>
机器学习--监督学习总结
查看>>
OO第四单元
查看>>
django_rq无法监听两个队列问题
查看>>
linux shell 数组建立及使用技巧
查看>>
anyproxy学习2-rule模块实现接口mock功能
查看>>
20165218 《网络对抗技术》 Exp9 网络安全基础
查看>>
产品管理:用户访谈之道
查看>>
hadoop系统的端口
查看>>
git 使用和安装
查看>>
css布局之圣杯布局
查看>>
.net中使用滤镜filter
查看>>
CentOS 6.5 下安装jdk
查看>>
算法之 线性表顺序结构
查看>>
使用javac,手动编译一个java文件的方法
查看>>
mongo的安装
查看>>