Skip to content

Instantly share code, notes, and snippets.

@6174
Last active December 20, 2015 03:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 6174/6062438 to your computer and use it in GitHub Desktop.
Save 6174/6062438 to your computer and use it in GitHub Desktop.
avalonJS 源码里边的一些有趣片段!
var DONT_ENUM = "propertyIsEnumerable,isPrototypeOf,hasOwnProperty,toLocaleString,toString,valueOf,constructor".split(",");
var class2type = {};
"Boolean Number String Function Array Date RegExp Object Error".replace(rword, function(name) {
class2type["[object " + name + "]"] = name.toLowerCase()
});
//=========================================================================================================//
//=========================================================================================================//
if (/[native code]/.test(Object.getPrototypeOf)) {
avalon.isPlainObject = function(obj) {
return obj && typeof obj === "object" && Object.getPrototypeOf(obj) === oproto
}
}
//=========================================================================================================//
//=========================================================================================================//
//兼容ie6的slice方法
var W3C = window.dispatchEvent;
var aslice = [].slice;
function resetNumber(a, n, end) {
if ((a === +a) && !(a % 1)) { //如果是整数
if (a < 0) {
a = a * -1 >= n ? 0 : a + n
} else {
a = a > n ? n : a
}
} else {
a = end ? n : 0
}
return a
}
var slice = W3C ? function(nodes, start, end) {
return aslice.call(nodes, start, end);
} : function(nodes, start, end) {
var ret = [],
n = nodes.length;
start = resetNumber(start, n)
end = resetNumber(end, n, 1)
for (var i = start; i < end; ++i) {
ret[i - start] = nodes[i]
}
return ret
};
//=========================================================================================================//
//=========================================================================================================//
//这小段代码信息量好大, 插,
//MutationObserver给开发者们提供了一种能在某个范围内的DOM树发生变化时作出适当反应的能力
//https://developer.mozilla.org/zh-CN/docs/DOM/MutationObserver 这篇介绍还不错
var BrowserMutationObserver = window.MutationObserver || window.WebKitMutationObserver;
if (BrowserMutationObserver) {
avalon.nextTick = function(callback) {
var input = DOC.createElement("input")
var observer = new BrowserMutationObserver(function(mutations) {
mutations.forEach(function() {
callback()
});
});
//设置要观察变化的DOM 对象 input
observer.observe(input, {
attributes: true
});
input.setAttribute("value", Math.random())
}
} else if (window.VBArray) {
//ie6 下面就是这样实现nextTip的么, 太有才了!
avalon.nextTick = function(callback) {
var node = DOC.createElement("script");
node.onreadystatechange = function() {
callback()
node.onreadystatechange = null
root.removeChild(node)
node = null
};
root.appendChild(node);
}
} else {
avalon.nextTick = function(callback) {
setTimeout(callback, 0)
}
}
//=========================================================================================================//
//=========================================================================================================//
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment