@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 checkYUI[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; iif (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; iif (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; inode = 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);}