疯狂js

/*
*
*CrazyJs
*
*
*/


(function (window, undefine) {

    //局部变量
    var crazyJs = function (selector, context) {
        return new crazyJs.fn.buildCrazyJs(selector, context);
    },
    //快速检索
   quickExpr = /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,
    //html标签
   htmltag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,

   toString = Object.prototype.toString,

    DOMContentLoaded,

    //文档对象
    documentCJ,

    push = Array.prototype.push;

    readyFuns = [];

    crazyJs.fn = crazyJs.prototype = {
        /*crazyJs内部构建起,在构建crazyJs时系统采用这个构建子进行构建对象,这里对象时脚本对象,例如
        *crazyJs,
        
        */
        buildCrazyJs: function (selector, context) {

            var match;
            if (!selector) {
                return this;
            }
            //DOM对象
            if (selector.nodeType) {
                this.context = this[0] = selector;
                this.length = 1;
                return this;
            }

            //匹配选择符
            if (typeof (selector) == "string") {
                match = quickExpr.exec(selector);
                //                if (match[1])
                //                    doc = context ? context : document;

                //选择单个标签
                if (match && match[1]) {

                    //
                    tags = htmltag.exec(selector);
                    //如果是html 标签选择
                    if (tags) {
                        //创建一个元素
                        selector = [document.createElement(tags[1])];
                        //是否是数组
                        if (crazyJs.isArray(selector) && t) {
                            //构建数组
                            return this.setArray(selector);

                        }

                    }


                }
                //处理选择$("#Id")
                else if (match && match[2] && !context) {

                    element = document.getElementById(match[2]);
                    if (element) {
                        this.length = 1;
                        this[0] = element;
                    }
                    this.context = document;
                    this.selector = selector;
                    return this;
                }
                //标签选择
                else if (/^\w+$/.test(selector) && !context) {

                    this.selector = document.getElementsByTagName(selector);
                    this.context = document;
                    if (!context && crazyJs.isArray(this.selector)) {
                        return this.setArray(this.selector);

                    }

                }

 

            }  //end if(typeof (selector=="string")

            //函数
            if (crazyJs.isFunction(selector)) {
                //加载函数
                return documentCJ.load(selector);
            }

        }, //end buildCrazyJs

        //默认当前长度为0
        length: 0,

        //  selector: "",
        /*
        *预加载执行脚本
        */
        load: function (callback) {


            /*
            * crazyJs 预加载
            * 为执行回调脚本加载做好准备
            */
            crazyJs.preLoad();
            //如果crazyJs准备就绪则执行回调
            if (crazyJs.isReady) {
                //执行回调否则进入等待队列
                callback.call(document, this);
            } else {

                readyFuns.push(callback);
            }
            return this;


        }, //end load
        setArray: function (elem) {
            this.length = 0;
            push.apply(this, elem);
            return this;

        },

        attr: function () {

        },
        each: function (callback) {
            if (!callback)
                return this;
            for (i = 0; i <this. length; i++) {
               callback.call(this);

            }

        }

 

    }//end crazyJs.fn
    /*
    *
    *重力转移,使得构建buildCrazyJs具备crazyJs对象所有的对外属性与方法
    *
    */
    crazyJs.fn.buildCrazyJs.prototype = crazyJs.fn;

    //生产一个文档crazyJS 对象,控制文档

    documentCJ = crazyJs(document);

    // Cleanup functions for the document ready method
    if (document.addEventListener) {
        DOMContentLoaded = function () {
            document.removeEventListener("DOMContentLoaded", DOMContentLoaded, false);
            crazyJs.load();
        };

    } else if (document.attachEvent) {
        DOMContentLoaded = function () {
            // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
            if (document.readyState === "complete") {
                document.detachEvent("onreadystatechange", DOMContentLoaded);

                crazyJs.load();
            }
        };
    };


    /*
    * 继承实现
    *
    */
    crazyJs.inherit = crazyJs.fn.inherit = function (deepcopy, srcobj, objn) {

        var target = arguments[0] || {},
         i = 1,
         length = arguments.length,
         deep = false,
          arg,
           name,
            src,
            copy;

        //处理深度拷贝
        if (typeof target === "boolean") {
            deep = target;
            target = arguments[1] || {};
            // skip the boolean and the target
            i = 2;
        }

        // 处理字符串或者是数字其他情况
        if (typeof target !== "object" && typeof target != "[object Function]") {
            target = {};
        }

        // 如果只有一个参数则把拷贝目标指向当前调用者
        if (length === 1) {
            target = this;
            --i;
        }

        for (; i < arguments.length; i++) {
            arg = arguments[i];

            if (arg == target)
                continue;
            if (arg) {

                for (name in arg)
                    if (!deep)
                        target[name] = arg[name];
                    else {

                    }

            } //end if(arg)


        } //end     for (; i < arguments.length; i++) 

        return target;


    };

    //对类库扩展
    crazyJs.inherit({
        //状态
        isReady: false,
        //加载
        load: function () {

            if (!crazyJs.isReady) {
                if (!document.body)
                    return setTimeout(crazyJs.load, 13);

            }
            crazyJs.isReady = true;

            if (readyFuns) {

                i = 0;
                while (temfn = readyFuns[i++]) {
                    temfn.call(document, crazyJs);

                } //end while

            } //end  if(readyFuns)
            //释放
            readyFuns = null;

        }, //end of  load function
        preLoad: function () {

            if (document.readyState == "complete")
                return crazyJs.load();

            // Mozilla, Opera and webkit nightlies currently support this event
            if (document.addEventListener) {
                // Use the handy event callback
                document.addEventListener("DOMContentLoaded", DOMContentLoaded, false);

                // A fallback to window.onload, that will always work
                window.addEventListener("load", crazyJs.load, false);

                // If IE event model is used
            } else if (document.attachEvent) {
                // ensure firing before onload,
                // maybe late but safe also for iframes
                document.attachEvent("onreadystatechange", DOMContentLoaded);

                // A fallback to window.onload, that will always work
                window.attachEvent("onload", crazyJs.load);


            }

        }, //end of preLoad
        //判断对象是否是一个函数,是返回真,否则返回假
        isFunction: function (obj) {
            return toString.call(obj) == "[object Function]";

        }, //end of isFunction
        isSimpleObject: function (obj) {
            if (!obj || toString.call(obj) !== "[object Object]" || obj.nodeType || obj.setInterval) {
                return false;
            }

            // Not own constructor property must be Object
            if (obj.constructor
   && !hasOwnProperty.call(obj, "constructor")
   && !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf")) {
                return false;
            }

            // Own properties are enumerated firstly, so to speed up,
            // if last one is own, then all properties are own.

            var key;
            for (key in obj) { }
            return true;
            // return key === undefined || hasOwnProperty.call(obj, key);

        }, //end of  isSimpleObject
        isArray: function (obj) {
            return toString.call(obj) == "[object Array]";
        },
        //构建一个数组
        //src 数组源
        //res 构建
        newArray: function (src1, src2) {
            var ret = src2 || [];
            var i = crazyJs.isArray(src1) ? src.length : 0, j = 0;

            if (src1) {
                while (src2[j] != null)
                    src1[i++] = src2[j++];

            }
            src1.length = i;
            return ret;

        }

 

 


    }); //end of inherit;

    //暴露对外接口
    window.crazyJs = window.$ = crazyJs;

})(window)


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《疯狂JavaScript讲义》是一本以JavaScript为主题的教材,其代码内容涵盖了JavaScript的各个方面,从基础语法到高级应用。这本书的代码示例贴近实际开发场景,帮助读者掌握JavaScript编程技巧。 该讲义以清晰易懂的方式介绍了JavaScript的基础知识,包括数据类型、变量、运算符、流程控制等。通过这些基础知识的学习,读者可以建立起对JavaScript编程的基本理解。 书中除了基础部分,还涵盖了面向对象编程、函数式编程、DOM操作、事件处理、Ajax应用等更高级的知识点。这些内容是JavaScript开发必备的技能,能够帮助开发者更灵活地应对复杂的业务需求。 在讲解的过程中,作者提供了丰富的代码示例。通过这些示例,读者可以学习到如何正确地使用JavaScript语法、如何处理异常、如何进行代码调试等实际开发中常见的问题。 《疯狂JavaScript讲义》是一本面向初学者和有一定经验的开发者的教材。对于初学者而言,通过学习该书的代码示例,可以逐步掌握JavaScript的编程技巧,并能够应用到实际项目中;对于有经验的开发者而言,该书提供了许多高级用法和技巧,可以帮助他们深入理解和应用JavaScript。 总之,通过研读《疯狂JavaScript讲义》的代码内容,读者可以建立对JavaScript编程的扎实基础,掌握各种技巧,为成为一名优秀的JavaScript开发者打下坚实的基础。 ### 回答2: 《疯狂javascript讲义》是一本非常经典的技术书籍,针对JavaScript编程语言进行了深入浅出的讲解。其中包含了大量的代码示例,让读者可以通过动手实践来更好地理解和掌握JavaScript。 这本书的代码非常丰富,从基础的语法、数据类型、运算符等开始讲解,逐渐深入到函数、对象、数组、正则表达式、DOM操作等更加高级的知识点。每个知识点都会伴随着相关的代码示例,方便读者进行实践和练习。 除了基础知识的介绍,这本书也涵盖了一些实际应用的案例,比如如何通过JavaScript实现表单验证、动态创建页面元素、异步请求等。这些案例代码能够帮助读者更好地理解JavaScript在实际开发中的应用。 总的来说,《疯狂javascript讲义》的代码较为全面,从基础到高级都有所覆盖。通过阅读这本书并实践其中的代码,读者不仅可以掌握JavaScript的基本语法和使用方法,还能够提升自己的编程能力,理解一些常见的开发技巧和思想。 当然,读者在实践过程中可能会遇到一些问题,可以结合书中的解说和相关论坛等渠道进行交流和学习。通过与他人的讨论和分享经验,可以更好地理解和应用书中的代码示例。 总之,《疯狂javascript讲义》是一本很好的学习JavaScript的书籍,其中的代码示例能够帮助读者快速掌握和实践JavaScript的编程技巧,是学习和提升JavaScript能力的一本实用工具书。 ### 回答3: 《疯狂 JavaScript 讲义》是一本专门介绍 JavaScript 编程语言的教材,它的代码示例内容丰富多样,覆盖了 JavaScript 的各个方面。 这本讲义首先通过简单的例子介绍了 JavaScript 的基本语法和控制结构,包括变量、运算符、条件语句、循环等。然后,它逐步深入介绍了 JavaScript 的函数和对象的概念,并通过示例代码展示了如何定义和使用函数以及如何使用内置对象和自定义对象。 除了基本语法和对象,讲义还介绍了 JavaScript 的事件处理、DOM 操作、表单处理等高级内容。通过实例代码,读者可以学习如何在网页中操作 DOM 元素、如何响应用户的鼠标点击、键盘输入等事件,并且可以学习如何使用 JavaScript 来验证表单的输入、进行数据的处理等。 此外,讲义还介绍了 JavaScript 的异步编程,包括回调函数、Promise 和 async/await,这些内容对于处理异步操作非常重要。通过示例代码,读者可以了解到如何使用回调函数、Promise 和 async/await 来处理异步操作,从而优化程序的性能和用户体验。 总的来说,《疯狂 JavaScript 讲义》的代码非常丰富,既有基础的语法示例,也有高级的应用实例。读者可以通过阅读代码和实践,逐步提升自己的 JavaScript 编程能力,掌握各种实用的技巧和方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值