javascript - 如何在没有冗余的方法中处理长度为一和大于一的对象

标签 javascript

我正在编写我自己的 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/

相关文章:

javascript - jQuery循环插件切换到另一个选项卡后停止滑动

javascript - 没有jQuery的onmouseover过渡效果

javascript - 同步:onerror事件和n++

Javascript动态变量(添加随机数)

javascript - Rails - 使用 Javascript/HTML 上传文件

javascript - 如何将事件监听器结果输出到变量?

javascript - 通过字符串分配translateY值

javascript - 我的新 Reactjs 应用程序出现 404 错误,它是否正在寻找 main.js 文件?

javascript - javascript 对象如何可以只有属性而没有预定义的键

javascript - 响应浏览器的最大 json 大小