`
kun10
  • 浏览: 12977 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
  • lz12366: 没有safia环境,没法测试、、上面代码divs.apply存 ...
    YArray.test

YUI读码笔记-解析YUI3的构造器原型(一)

    博客分类:
  • YUI
阅读更多
yui-base里面在定义了YUI构造器之后,构造器里面有一些实例方法,我们知道肯定是定义在了YUI的构造器原型上面的。
这里先解析_init方法,Y实例的一个初始化方法
_init: function() {
       var filter,
            Y = this,//Y已经是一个YUI的实例,this就是这个YUI实例,
            G_ENV = YUI.Env,//赋值YUI的Env,全局的YUI环境变量
            Env = Y.Env,//YUI实例的Env属性
            prop;

        /**
         * The version number of the YUI instance.
         * @property version
         * @type string
         */
        Y.version = VERSION;//获取版本号

        if (!Env) {//如果没有一些环境变量
            Y.Env = {
                mods: {}, // flat module map
                versions: {}, // version module map
                base: BASE,//这里BASE神马的都是定义在_init函数外面的。
                cdn: BASE + VERSION + '/build/',//拼接CDN地址,对于淘宝很多还面临环境切换的问题。
                // bootstrapped: false,
                _idx: 0,
                _used: {},
                _attached: {},
                _yidx: 0,
                _uidx: 0,
                _guidp: 'y',
                _loaded: {},
                serviced: {},
//getBase方法,看名字可以看得出来,是用来获取cdn的base的
//接受两个参数,srcPattern和comboPattern ,comboPattern是一个正则表达式
                getBase: G_ENV && G_ENV.getBase || function(srcPattern, comboPattern) {
        var b, nodes, i, src, match;
        // get from querystring
        nodes = (doc && doc.getElementsByTagName('script')) || [];//获取页面所有的script
        for (i = 0; i < nodes.length; i = i + 1) {
            src = nodes[i].src;
            if (src) {

                match = src.match(srcPattern);
                b = match && match[1];//为什么是match[1],这个和YUI的路径有关,就是说取到了这个文件
                if (b) {
                    // this is to set up the path to the loader.  The file
                    // filter for loader should match the yui include.
                    filter = match[2];

                    if (filter) {
                        match = filter.indexOf('js');

                        if (match > -1) {
                            filter = filter.substr(0, match);
                        }
                    }

                    // extract correct path for mixed combo urls
                    // http://yuilibrary.com/projects/yui3/ticket/2528423
                    match = src.match(comboPattern);
                    if (match && match[3]) {
                        b = match[1] + match[3];
                    }

                    break;
                }
            }
        }

        // use CDN default
        return b || Env.cdn;
    }
            };//结束YUI的Env的定义,getBase是获取base文件的方法。

            Env = Y.Env;//重新赋一遍值,这时候Env是一个有货的对象

            Env._loaded[VERSION] = {};//记录加载过的模块

            if (G_ENV && Y !== YUI) {//这里好奇怪,Y是YUI的实例,自然不等于YUI,这里有疑问
                Env._yidx = ++G_ENV._yidx;//G_ENV是YUI的静态属性,而Env._yidx是Y实例的index值。全局自增并赋值局部的index值。
                Env._guidp = ('yui_' + VERSION + '_' +
                             Env._yidx + '_' + time).replace(/\./g, '_');
            } else if (YUI._YUI) {//YUI._YUI是已经有YUI全局变量加载进页面,就从原来的YUI的上面取_yidx,

                G_ENV = YUI._YUI.Env;
                Env._yidx += G_ENV._yidx;//这里为什么不用自增的变量。保持原来的YUI的_yidx不变。
                Env._uidx += G_ENV._uidx;//uidx是另一个index值。

                for (prop in G_ENV) {
                    if (!(prop in Env)) {
                        Env[prop] = G_ENV[prop];//把G_ENV上面的参数记录到当前的Y实例上面。
                    }
                }

                delete YUI._YUI;//_YUI的任务光荣结束,想不通,
            }

            Y.id = Y.stamp(Y);
            instances[Y.id] = Y;//instances就是一个记录YUI实例的数组

        }

        Y.constructor = YUI;//记录Y实例的构造器

        // configuration defaults
        Y.config = Y.config || {//Y实例的配置
            win: win,
            doc: doc,
            debug: true,
            useBrowserConsole: true,
            throwFail: true,
            bootstrap: true,
            cacheUse: true,
            fetchCSS: true
        };

        Y.config.base = YUI.config.base ||
            Y.Env.getBase(/^(.*)yui\/yui([\.\-].*)js(\?.*)?$/,
                          /^(.*\?)(.*\&)(.*)yui\/yui[\.\-].*js(\?.*)?$/);//调用前面的getBase

        if (!filter || (!('-min.-debug.').indexOf(filter))) {
            filter = '-min.';
        }

        Y.config.loaderPath = YUI.config.loaderPath ||
            'loader/loader' + (filter || '-min.') + 'js';

    },
分享到:
评论

相关推荐

    yuicompressor-maven-plugin

    这个插件是基于YUI Compressor,一个由Yahoo开发的开源工具,它能有效地压缩和混淆代码,从而减少文件大小,提升网页加载速度,并降低服务器带宽消耗。 ### 一、Maven插件介绍 Maven是Java领域广泛使用的项目管理...

    yui-yuidoc-yuidoc-50-529-gc631758

    【标题】"yui-yuidoc-yuidoc-50-529-gc631758" 指向的是一个关于 Yahoo User Interface Library (YUI) 和 YUIDoc 的特定版本或修订版。YUI 是一个开源的 JavaScript 库,提供了一系列模块化的工具,用于构建富有交互...

    yuicompressor-2.4.8.jar

    同时,yuicompressor还支持CSS压缩,通过对CSS选择器和值进行压缩,同样能有效减少文件大小。 在使用yuicompressor时,开发者可以通过命令行或者集成到IDE(如IntelliJ IDEA,简称Idea)中来操作。对于Idea用户,...

    eclipse yuicompressor-maven-plugin

    "eclipse yuicompressor-maven-plugin"是Maven生态系统中的一个插件,专门用于这个目的。下面将详细阐述这个插件的功能、用法以及它在Maven项目中的应用。 ### 1. Maven简介 Maven是一个强大的项目管理和综合工具,...

    yuicompressor-yui compressor

    雅虎推出的一款javascript压缩工具。有JAVA版本和.NET版本。 yuicompressor-2.4.2.jar yuicompressor-2.4.7.jar jsZip.exe yuicompressor yui compressor js压缩工具 javascript压缩工具 css压缩工具 ----------...

    yuicompressor-maven-plugin, 用于压缩 (Minify/Ofuscate/Aggregate) Javascript文件和使用 YUI 压缩器的CSS文件的Maven 插件.zip

    yuicompressor-maven-plugin, 用于压缩 (Minify/Ofuscate/Aggregate) Javascript文件和使用 YUI 压缩器的CSS文件的Maven 插件 [[Flattr this git repo] ( http://api.flattr.com/button/flattr-badge-large.png)]...

    yui3-master.zip

    《深入理解YUI3:基于yui3-master.zip的探讨》 YUI(Yahoo! User Interface Library)是由雅虎公司开发的一套开源JavaScript库,它为Web开发者提供了丰富的功能和工具,以创建交互性强、性能优秀的网页应用。YUI3是...

    grunt-yui-compressor-源码.rar

    《grunt-yui-compressor:JavaScript与CSS压缩利器的源码解析》 在Web开发中,优化资源加载速度是提升用户体验的重要一环。压缩JavaScript和CSS文件可以显著减少页面加载时间,"grunt-yui-compressor"就是一个这样...

    yui4jsf-0.6.1 jar包

    yui4jsf所有控件,可以和seam框架结合,已验证,源码在yui4jsf-0.6.1\net\sf\yui4jsf下

    YUI-EXT使用详解

    3. **数据绑定(Data Binding)**:YUI-EXT支持数据绑定,允许UI组件与后台数据模型直接关联。当数据模型发生变化时,UI会自动更新,反之亦然。这极大地简化了数据驱动的界面开发。 4. **表单(Forms)**:YUI-EXT...

    webstorm_phpstorm_yuicompressor-2.4.8.jar

    标题中的"webstorm_phpstorm_yuicompressor-2.4.8.jar"正是YUI Compressor的一个版本,适用于WebStorm和PhpStorm。这个文件是Java可执行的JAR包,包含YUI Compressor的核心压缩算法,可以处理并压缩JavaScript和CSS...

    yuicompressor-2.4.jar

    压缩JS所使用jar包!...压缩JS:java -jar yuicompressor-2.4.jar --type js xxx.js -o xxx.js --charset utf-8 压缩CSS:java -jar yuicompressor-2.4.jar --type css xxx.css -o xxx.css --charset utf-8

    yui-hotel-calendar.rar

    #酒店价格日历 ####基于YUI3开发的价格日历组件 @name:Y.PriceCalendar @requires:['node', 'base-base', 'event-mouseenter']

    yui3-3.17.2最新版

    YUI 3包含了一系列核心模块,如Event(事件处理)、Node(DOM操作)、IO(异步数据交互)等,同时还有许多可选的组件,如Grids(表格)、Charts(图表)、Form(表单元素)等,覆盖了前端开发的多个方面。...

    yui-compressor 2.4.6 2011-04-15发布YUI

    yui compressor 2.4.6 发布日期:2011-04-15 用例: java -jar yuicompressor-2.4.6.jar myfile.js -o myfile-min.js

    yui_2.9.0前端UI

    是一组工具和控件,用JavaScript写成, 为的是用DOM 脚本,DHTML和AJAX等技术创建丰富的网页交互式应用程序。 YUI 基于BSD协议,对所有的使用方式都是免费的。YUI 项目包括YUI 库和两个创建时工具: YUI Compressor ...

Global site tag (gtag.js) - Google Analytics