• 仿JQ基础架构,可扩展。


    (function(win,doc,fn){
        var events = [];//拷贝核心方法
        var publicEvent = ["extend","fn"];//公共核心方法
        var removefn = [];
        var A = "A";//原型库
        var $_ = "$_";//库名
        win[A] = function(e,contentText){
            var query = this.__proto__;
            contentText = contentText || [];
            contentText.push.apply(contentText,doc.querySelectorAll(e));
            query.contentText = contentText;
            return query;
        };
        //        ===========方法处理s=========
        win[A].fn = {
            extend:function(obj){//事件方法处理
                for(var i in obj){
                    this[i] = obj[i];
                };
            }
        };
        win[A].extend = function(obj){//核心方法处理
            events.push(obj)
            for(var i in obj){
                this[i] = obj[i];
            };
        };
        //        ===========方法处理e=========

        //        ===========方法扩展s=========
        //核心方法扩展
        win[A].extend({
            noConflict:function(name){//多库共存
                var new$ = win[$_];
                win[$_] = undefined;
                return new$;
            },
            query:win[A],
            query_V:"0.1",
            query_Name:A,
            query_Conflict:$_,//库名
        });
        win[A].fn.extend({
        })
        //事件方法扩展
        var eventsFn = ["click"];//event事件数组
        for (var i = 0 ; i < eventsFn.length;i++){
            win[A].fn[eventsFn[i]] = (function(name){//写入事件
                return function (fn){
                    var context = this.contentText;
                    for(var i = 0 ; i < context.length;i++){
                        removefn.push({
                            context:context,
                            fn:fn
                        });
                        context[i].addEventListener(name,fn);
                    };
                };
            })(eventsFn[i]);
            win[A].fn["un"+eventsFn[i]] = (function(name){//移除事件
                return function (fn){
                    fn = fn || new Function();
                    for(var i = 0 ; i < removefn.length;i++){
                        var index = 0;
                        for(var j = 0 ; j < removefn[i].context.length ; j++){
                            if(removefn[i].context[j] == this.contentText[j]){
                                index++;
                            };
                        };
                        if(index == removefn[i].context.length){
                            var context = this.contentText;
                            for(var a = 0 ; a < context.length;a++){
                                context[a].removeEventListener(name,removefn[i].fn);
                            };
                        };
                    };
                    fn();
                };
            })(eventsFn[i]);
        };
        //        ===========方法扩展e=========
        win[A].prototype = win[A].fn;
        win[A].prototype.fn = win[A].fn;
        fn(win,doc,win[A],events,publicEvent);
    })(window,document,function(win,doc,A,events,publicEvent){
        win[A.query_Conflict] = function(a){
            return new A(a);
        };
        for(var i = 0 ; i < events.length ; i++){
            for(var j in events[i]){
                win[A.query_Conflict][j] = events[i][j];
            };
        };
        for(var i = 0 ; i < publicEvent.length;i++){
            win[A.query_Conflict][publicEvent[i]] = A[publicEvent[i]];
        };
        win[A.query_Conflict].prototype = A.prototype;
    });

  • 相关阅读:
    文章用手,产品用心
    斌哥的 Docker 进阶指南
    你是想做个安静的程序员,还是去创个业呢?
    Java 8怎么了:局部套用vs闭包
    Cloud Insight支持阿里云一键接入了,so what?
    Nagios 快速实现数据可视化的几种方式
    uniapp 组件传参
    Vue的Key属性,v-for和v-if,v-if/v-show,v-pre不渲染,v-once只渲染一次
    Vue的Key属性,v-for和v-if,v-if/v-show,v-pre不渲染,v-once只渲染一次
    Vue绑定事件,双向数据绑定,只是循环没那么简单
  • 原文地址:https://www.cnblogs.com/zys8119/p/6007567.html
Copyright © 2020-2023  润新知