我正在编写我自己的 JavaScript 绑定(bind)方法(用于练习)并且无法放弃在此方法中以不同方式处理单个对象与多个对象的需要,这仅仅是因为我需要循环遍历长度大于的对象一。 (参见下面的 obj 与 obj[i])
有什么办法可以让这个绑定(bind)方法不那么多余吗?(请假设使用另一个库是不可能的。谢谢)
var foo = (function () {
return {
bind: function (obj, type, handler, delegate) {
var delegate = delegate || false,
len = obj.length;
if (typeof obj == 'undefined') {
return false;
}
if (len > 1) {
for (var i = 0; i < len; i++) {
if (obj.addEventListener) {
obj[i].addEventListener(type, handler, delegate); // false: bubble (^). true: capture (v).
} else if (obj.attachEvent) {
obj[i].attachEvent('on' + type, handler);
} else {
obj[i]['on' + type] = handler;
}
}
} else {
if (obj.addEventListener) {
obj.addEventListener(type, handler, delegate); // false: bubble (^). true: capture (v).
} else if (obj.attachEvent) {
obj.attachEvent('on' + type, handler);
} else {
obj['on' + type] = handler;
}
}
}
}
})();
最佳答案
你可以强制将其放入一个数组中:
if (!('length' in obj))
obj = [ obj ];
for (var i = 0; i < obj.length; i++) {
if (obj[i].addEventListener) {
obj[i].addEventListener(type, handler, delegate); // false: bubble (^). true: capture (v).
} else if (obj[i].attachEvent) {
obj[i].attachEvent('on' + type, handler);
} else {
obj[i]['on' + type] = handler;
}
}
关于javascript - 如何在没有冗余的方法中处理长度为一和大于一的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4210302/