Cheshirecat

2 干净的,温暖的


@during:09/12/15-09/12/30:version:3.0:source:build/*/*.js:module:core

/**
FILE: YUI.JS
LINE: 120-124,682-686
TAG: NONE
COMMENTS:for in 与hasOwnProperty在Y.Object中分别对应hasKey和owns方法,根据MDC的解释,与in操作符不同的是hasOwnProperty并不会去检查in对象的原型链,但是for in 函数只会遍历用户定义的属性(显式),在yui.js中,下面出现的代码片段中作为循环用.
MDC参考:https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Object/hasOwnProperty
::CODE START::
var o = {};
console.log(‘toString’ in o);
console.log(o.hasOwnProperty(‘toString’));
console.log(‘length’ in o);
for (var i in o) {
console.log(i);
};
::CODE END::
*/

for (j in m) {
    if (m.hasOwnProperty(j)) {
        mods[j] = m[j];
    }
};
for (i in p) {
    if (1) { // intenionally ignoring hasOwnProperty check
        YUI[i] = p[i];
    }
}

/**
FILE: YUI.JS
LINE: 254-257
TAG: applyTo
COMMENTS:return用在函数中,是将表达式的值传递给函数调用者,并停止函数运行,如果函数不包含return语句,则返回给调用者undefined(犀牛书第四版第七章),在yui2以及yui3中,会使用到return null,出于直白还是链式操作的考虑?;
e.g.
::CODE START::
var unknown_undefined = function() {return}(); //undefined
var known_undefined = function() {}(); //undefined
var unknown_null = function() {return null}(); //null
::CODE END::
*/

applyTo: function(id, method, args) {
    if (!(method in _APPLY_TO_WHITE_LIST)) {
        this.log(method + ': applyTo not allowed', 'warn', 'yui');
        return null;
    };
    /**some code*/
}

/**
FILE: YUI.JS
LINE: 1384-1387
TAG: YArray.test
COMMENTS:array-like的一些特征判断,array-like通常为函数的arguments,HTMLElement,当前版本的test方法未对HTMLElement进行处理, alert方法用于排除window,size方法用于排除file类型;对于array-like,犀牛书对此的解释是包含length属性的对象,并给出建造array-like的例子.
e.g.
::CODE START::
:::FLAG 1st
console.log(‘window.length’ + window.length + ‘window has alert’ + (“alert” in window));
var fsoActiveX = new ActiveXObject(“Scripting.FileSystemObject”),
fileActiveX = fsoActiveX.getFile(dir:\\filepath\\filename);
console.log(fileActiveX.length);
:::FLAG 2nd code source:https://developer.mozilla.org/en/DOM/File.size
var fileInput = document.getElementById(“myfileinput”);
var files = fileInput.files;
for (var i = 0; i < files.length; i++) {
alert(files[i].name + ” has a size of ” + files[i].size + ” Bytes”);
};
:::FLAG 3rd 犀牛书第五版第七章 7.8 Array-Like Object
var a = {}; // Start with a regular empty object
var i = 0;
while(i < 10) {
a[i] = i * i;
i++;
}
a.length = i;
::CODE END::
*/

if ("length" in o && !("tagName" in o) && !("alert" in o) &&
    (!Y.Lang.isFunction(o.size) || o.size() > 1)) {
    r = 2;
}

/**
FILE: YUI.JS
LINE: 1657-1671
TAG: YArray.each,YArray.some,YArray.indexOf
COMMENTS:YArray.each,YArray.some,YArray.indexOf分别对应javascript 1.6版本中的forEach,some,indexOf方法,yui3在实现上没有使用MDC所采取改变Array.prototype的方法,避免了对原生对象的污染.
MDC地址:https://developer.mozilla.org/en/New_in_JavaScript_1.6
e.g.
::CODE START::
NONE
::CODE END::
*/

YArray.each = (Native.forEach) ?
    function (a, f, o) { 
        Native.forEach.call(a || [], f, o || Y);
        return Y;
    } :
    function (a, f, o) { 
        var l = (a && a.length) || 0, i;
        for (i = 0; i < l; i=i+1) {
            f.call(o || Y, a[i], i, a);
       }
       return Y;
   };
YArray.indexOf = (Native.indexOf) ?
    function(a, val) {
        return Native.indexOf.call(a, val);
    } :
    function(a, val) {
        for (var i=0; i
            if (a[i] === val) {
                return i;
            }
        }
        return -1;
    };
 YArray.some = (Native.some) ?
     function (a, f, o) { 
         return Native.some.call(a, f, o);
    } :
     function (a, f, o) {
         var l = a.length, i;
         for (i=0; i
             if (f.call(o, a[i], i, a)) {
                 return true;
             }
         }
         return false;
     };

/**
FILE: YUI.JS
LINE: 1657-1671
TAG: Y.cached
COMMENTS:判断arg2的存在替代使用arguments.length的方法,简洁而高效;
e.g.
::CODE START::
NONE
::CODE END::
*/

Y.cached = function(source, cache, refetch){
    /**some code*/
    return function(arg1, arg2) {
        var k = (arg2) ? Array.prototype.join.call(arguments, DELIMITER) : arg1;
        /**some code*/
    };
};

/**
FILE: YUI.JS
LINE: 2670-2671
TAG: clearAttributes
COMMENTS:clearAttributes主要作用为移除节点属性,当前只有Internet Explorer支持,而对于style属性以及脚本类型的属性,id属性都不会移除.由于对于HTMLELEMENT类型的对象,设置其属性,在IE下使用delete移除将会抛错,抛错信息为此类对象不支持此方法;
关于clearAttributes可参考
MSDN: http://msdn.microsoft.com/en-us/library/ms536350%28VS.85%29.aspx
QuirksMode: http://www.quirksmode.org/dom/w3c_core.html
e.g.
::CODE START::
NONE
::CODE END::
*/

if (node.clearAttributes) {
    node.clearAttributes();
} else {
    for (attr in node) {
        if (node.hasOwnProperty(attr)) {
            delete node[attr];
        }
    }
}

/**
FILE: YUI.JS
LINE: 2668-2686
TAG: _purge
COMMENTS:移除节点前移除绑定在节点元素上的方法,防止内存泄露,通常在此情况防止内存泄露的方法为将属性(方法)值重置为null;
e.g.
::CODE START::
node.attr = null;
::CODE END::
*/

for (i=0; i
    node = n[i];
    if (node.clearAttributes) {
        node.clearAttributes();
    } else {
        for (attr in node) {
            if (node.hasOwnProperty(attr)) {
                delete node[attr];
            }
        }
    }
    h.removeChild(node);
}

/**
FILE: YUI.JS
LINE: 2670-2671
TAG: INSTANCE.log
COMMENTS:opera中的javascript控制台输出信息的方法,opera.postError;
opera开发者社区参考

http://dev.opera.com/articles/view/how-to-debug-javascript-problems-with-op/

e.g.
::CODE START::
NONE
::CODE END::
*/

if (typeof console != UNDEFINED && console.log) {
    f = (cat && console[cat] && (cat in LEVELS)) ? cat : 'log';
    console[f](m);
} else if (typeof opera != UNDEFINED) {
    opera.postError(m);
}