Javascript 如何在方法中处理长度为1且大于1的对象而无需重新一致性
我正在编写自己的JavaScript绑定方法(用于实践),在这种方法中,我很难摆脱以不同方式处理单个对象和多个对象的需要,这仅仅是因为我需要遍历长度大于1的对象。(见下文obj与obj[i]) 有什么方法可以减少这种绑定方法的冗余感吗?(请假设不可能使用其他库..谢谢)Javascript 如何在方法中处理长度为1且大于1的对象而无需重新一致性,javascript,Javascript,我正在编写自己的JavaScript绑定方法(用于实践),在这种方法中,我很难摆脱以不同方式处理单个对象和多个对象的需要,这仅仅是因为我需要遍历长度大于1的对象。(见下文obj与obj[i]) 有什么方法可以减少这种绑定方法的冗余感吗?(请假设不可能使用其他库..谢谢) var foo=(函数(){ 返回{ 绑定:函数(对象、类型、处理程序、委托){ var delegate=delegate | | false, len=物体长度; 如果(对象类型==‘未定义’){ 返回false; } 如果
var foo=(函数(){
返回{
绑定:函数(对象、类型、处理程序、委托){
var delegate=delegate | | false,
len=物体长度;
如果(对象类型==‘未定义’){
返回false;
}
如果(len>1){
对于(变量i=0;i
您可以将其强制放入阵列中:
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;
}
}
if(!('length'在obj中))
obj=[obj];
对于(变量i=0;i
如果不完全理解代码,我会说,如果只有一个对象,它应该仍然包含在一个数组中,因此会发生一次迭代。应该没有必要考虑这种特殊情况
您应该检查单数情况,并将其转换为具有单个条目的数组:
if (obj.constructor.toString().indexOf("Array") == -1) {
obj = [obj];
}
您可以测试
obj
以查看它是否具有nodeType
属性。如果是,请将其放置在一个数组中
if( obj.nodeType ) {
obj = [ obj ];
//...
或者可以在空数组上执行concat
obj = [].concat(obj);
如果您没有数组,这将为您提供一个数组
因此,您的最终代码可能如下所示:
var foo = (function () {
return {
bind: function (obj, type, handler, delegate) {
var delegate = delegate || false
if (typeof obj == 'undefined') {
return false;
}
obj = [].concat(obj);
for (var i = 0, len = obj.length; i < len; i++) {
if (obj[i].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;
}
}
}
}
})();
var foo=(函数(){
返回{
绑定:函数(对象、类型、处理程序、委托){
var delegate=delegate | | false
如果(对象类型==‘未定义’){
返回false;
}
obj=[].concat(obj);
对于(变量i=0,len=obj.length;i
带有空数组的Concat obj:
obj = [].concat(obj)
您的代码不适用于单元素数组。我最初设置了getElementByClass()方法,如果实际对象的长度为1,则返回该对象。现在开始觉得这是个愚蠢的想法。这样做基本上就需要运行你们正在谈论的这项检查。20分钟内+1,当我拿回我的选票时。。。(尽管我不喜欢你在if语句中省略了花括号。)对,我假设他可以计算出,如果对象是单数的,将其转换为数组。我将作相应的修改。
obj = [].concat(obj)