新浪微博JS公用库分析

本文解析了新浪微博前端基本公用库代码,介绍了其核心功能如命名空间注册、DOM操作、事件处理等,并提到了jQuery的替代使用及一些常用的技术如Sizzle选择器引擎、BigPipe技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者 : zhanhailiang    日期 : 2012-10-30

闲暇之余,阅读了下新浪微博的基本公用库代码

var STK = function () {
    var a = {},
        b = [];
    a.inc = function (a, b) {
        return !0
    };
    // 完整命名空间
    a.register = function (c, d) {
        var e = c.split("."),
            f = a,
            g = null;
        while (g = e.shift()) {
            if (e.length) {
                f[g] === undefined && (f[g] = {});
                f = f[g];
            } else if (f[g] === undefined) {
                try {
                    f[g] = d(a);
                } catch (ex) {
                    b.push(ex);
                }
            }
        }
    };
    // 短命名空间
    a.regShort = function (b, c) {
        if (a[b] !== undefined) {
            throw "[" + b + "] : short : has been register";
        }
        a[b] = c;
    };
    // IE检测
    a.IE = /msie/i.test(navigator.userAgent);
    // 获取DOM结点
    a.E = function (a) {
        return typeof a == "string" ? document.getElementById(a) : a;
    };
    a.C = function (a) {
        var b;
        a = a.toUpperCase();
        a == "TEXT" ? b = document.createTextNode("") : 
            a == "BUFFER" ? b = document.createDocumentFragment() : b = document.createElement(a);
        return b;
    };
    // 日志工具类,记录到闭包数组b中
    a.log = function (a) {
        b.push("[" + (new Date).getTime() % 1e5 + "]: " + a);
    };
    // 错误信息记录在闭包数组b中
    a.getErrorLogInformationList = function (a) {
        return b.splice(0, a || b.length)
    };
    return a
}();

$Import = STK.inc;

// 声明命名空间core.func.empty
STK.register("core.func.empty", function () {
    return function () {}
});

// 映射短命名空间
(function () {
    var a = STK.core,
        b = {
            tween: a.ani.tween,
            tweenArche: a.ani.tweenArche,
            arrCopy: a.arr.copy,
            arrClear: a.arr.clear,
            hasby: a.arr.hasby,
            unique: a.arr.unique,
            foreach: a.arr.foreach,
            isArray: a.arr.isArray,
            inArray: a.arr.inArray,
            arrIndexOf: a.arr.indexOf,
            findout: a.arr.findout,
            domNext: a.dom.next,
            domPrev: a.dom.prev,
            isNode: a.dom.isNode,
            addHTML: a.dom.addHTML,
            insertHTML: a.dom.insertHTML,
            setXY: a.dom.setXY,
            contains: a.dom.contains,
            position: a.dom.position,
            trimNode: a.dom.trimNode,
            insertAfter: a.dom.insertAfter,
            insertBefore: a.dom.insertBefore,
            removeNode: a.dom.removeNode,
            replaceNode: a.dom.replaceNode,
            Ready: a.dom.ready,
            setStyle: a.dom.setStyle,
            setStyles: a.dom.setStyles,
            getStyle: a.dom.getStyle,
            addClassName: a.dom.addClassName,
            hasClassName: a.dom.hasClassName,
            removeClassName: a.dom.removeClassName,
            builder: a.dom.builder,
            cascadeNode: a.dom.cascadeNode,
            selector: a.dom.selector,
            sizzle: a.dom.sizzle,
            addEvent: a.evt.addEvent,
            custEvent: a.evt.custEvent,
            removeEvent: a.evt.removeEvent,
            fireEvent: a.evt.fireEvent,
            fixEvent: a.evt.fixEvent,
            getEvent: a.evt.getEvent,
            stopEvent: a.evt.stopEvent,
            delegatedEvent: a.evt.delegatedEvent,
            preventDefault: a.evt.preventDefault,
            hotKey: a.evt.hotKey,
            memorize: a.func.memorize,
            bind: a.func.bind,
            getType: a.func.getType,
            methodBefore: a.func.methodBefore,
            timedChunk: a.func.timedChunk,
            funcEmpty: a.func.empty,
            ajax: a.io.ajax,
            jsonp: a.io.jsonp,
            ijax: a.io.ijax,
            scriptLoader: a.io.scriptLoader,
            require: a.io.require,
            jsonInclude: a.json.include,
            jsonCompare: a.json.compare,
            jsonClone: a.json.clone,
            jsonToQuery: a.json.jsonToQuery,
            queryToJson: a.json.queryToJson,
            jsonToStr: a.json.jsonToStr,
            strToJson: a.json.strToJson,
            objIsEmpty: a.obj.isEmpty,
            beget: a.obj.beget,
            cascade: a.obj.cascade,
            objSup: a.obj.sup,
            parseParam: a.obj.parseParam,
            bLength: a.str.bLength,
            dbcToSbc: a.str.dbcToSbc,
            leftB: a.str.leftB,
            trim: a.str.trim,
            encodeHTML: a.str.encodeHTML,
            decodeHTML: a.str.decodeHTML,
            parseURL: a.str.parseURL,
            parseHTML: a.str.parseHTML,
            queryString: a.str.queryString,
            htmlToJson: a.util.htmlToJson,
            cookie: a.util.cookie,
            drag: a.util.drag,
            timer: a.util.timer,
            jobsM: a.util.jobsM,
            listener: a.util.listener,
            winSize: a.util.winSize,
            pageSize: a.util.pageSize,
            templet: a.util.templet,
            queue: a.util.queue,
            stack: a.util.stack,
            swf: a.util.swf,
            URL: a.util.URL,
            scrollPos: a.util.scrollPos,
            scrollTo: a.util.scrollTo,
            getUniqueKey: a.util.getUniqueKey,
            storage: a.util.storage,
            pageletM: a.util.pageletM
        };
    for (var c in b) STK.regShort(c, b[c])
})();

// 其余略,大致看了下,使用了
1.jQurey Sizzle选择器引擎
2.easeTemplate模板
3.BigPipe技术的使用
4.其它都是些很常规的封装,此处略去N字

最后说一句,用jQuery会死啊!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值