jquery对原生方法的使用

来源:互联网 发布:孤芳不自赏 知乎 编辑:程序博客网 时间:2024/05/17 02:32
var deletedIds = [];var slice = deletedIds.slice;var concat = deletedIds.concat;var push = deletedIds.push;var indexOf = deletedIds.indexOf;var class2type = {};var toString = class2type.toString;var hasOwn = class2type.hasOwnProperty;var trim = "".trim;var support = {};


class2type[ toString.call(obj) ] || "object"  为什么很多都是使用call来调用?


var arr = [];
方式一:arr.concat();
方式二:core_concat.call(arr);
方式三:core_concat.apply(arr);

思考下边2个问题:

  1. jQuery为什么要先把这些方法存储起来?---------------------在压缩中更加节省空间
  2. jQuery为什么要采用方式二或者三,而不直接使用方式一的做法

nodejser在评论中也给出了另一种答案:
var obj = {};
此时调用obj.concat是非法的,但是如果jQuery采用上边方式二或者三的话,能够解决这个问题。
也即是让类数组也能用到数组的方法(这就是call跟apply带来的另一种用法),尤其在jQuery里边引用一些DOM对象时,也能完美的用这个方法去解决,妙!

使用原生的方法,可以提高页面的速度,但是原生的属性可不见得?以下是jq对typeof方法的改写

type: function( obj ) {if ( obj == null ) {return obj + "";//"null"}return typeof obj === "object" || typeof obj === "function" ?class2type[ toString.call(obj) ] || "object" :typeof obj;}

修改了typeof null为"object"的错误和typeof function(){} 为 "object"的bug



0 0
原创粉丝点击