2018年04月6日网站服务器迁移完成……

zepto源码

javascript 苏 demo 1635℃ 0评论

判断是否是数组

isArray = Array.isArray ||
            function(object){ return object instanceof Array }   

Array.isArray() 方法:如果一个对象是数组就返回true,如果不是则返回false

instanceof 用于判断一个变量是否某个对象的实例,如

var a= [];
alert(a instanceof Array);//返回 true

同时 alert(a instanceof Object) 也会返回 true

isArray 返回布尔值,如果Array.isArraytrue,则返回true,否则返回object instanceof Array的结果。

数据类型判断

class2type = {},

function type(obj) {
        return obj == null ? String(obj) :
        class2type[toString.call(obj)] || "object"
    }

    function isFunction(value) { return type(value) == "function" }
    function isWindow(obj)     { return obj != null && obj == obj.window }
    function isDocument(obj)   { return obj != null && obj.nodeType == obj.DOCUMENT_NODE }
    function isObject(obj)     { return type(obj) == "object" }

class2type是一个空对象,实际上一个什么都没有的空对象是这样创建的Object.create(null);

我们可以通过Object.prototype.toString.call()方法来判断数据类型,例如:

console.log(Object.prototype.toString.call(123)) //[object Number]  
console.log(Object.prototype.toString.call('123')) //[object String]    
console.log(Object.prototype.toString.call(undefined)) //[object Undefined]                         
console.log(Object.prototype.toString.call(true)) //[object Boolean]                                      
console.log(Object.prototype.toString.call({})) //[object Object]                                      
console.log(Object.prototype.toString.call([])) //[object Array]             
console.log(Object.prototype.toString.call(function(){})) //[object Function]  

首先如果参数objundefinednull,则通过String(obj)转换为对应的原始字符串“undefined”或“null”。

然后class2type[toString.call(obj)]首先借用Object的原型方法toString()来获取obj的字符串表示,返回值的形式是 [object class],其中的class是内部对象类。

然后从对象class2type中取出[object class]对应的小写字符串并返回;如果未取到则一律返回“object

get方法

get: function(idx){
            return idx === undefined ? slice.call(this) : this[idx >= 0 ? idx : idx + this.length]
        },

取集合中对应指定索引的值,如果idx小于0,则idx等于idx+length,length为集合的长度.

可能你刚看到slice.call(this)会觉得很纳闷,其实不仅是zepto.js的源码,包括jQuerybackbone的源码都是这么写的,只不过它们在最开头做了声明:

var push = array.push;
var slice = array.slice;
var splice = array.splice;

所以slice.call(this)其实还是Array.slce.call(this)

打赏

转载请注明:苏demo的别样人生 » zepto源码

   如果本篇文章对您有帮助,欢迎向博主进行赞助,赞助时请写上您的用户名。
支付宝直接捐助帐号oracle_lee@qq.com 感谢支持!
喜欢 (0)or分享 (0)
发表我的评论
取消评论
表情