我刚刚开始接触JavaScript,网上有一段设置事件驱动的方法如下 
   var addEventHandler = function(obj, type, func) {
        if (!obj) { return; }
        var doOn = function(o) {
            if (o.addEventListener) { o.addEventListener(type, func, false); }
            else if (o.attachEvent) { o.attachEvent("on" + type, func); }
            else { o["on" + type] = func; }
        }
        var IsArray = function(v) {
            try {
                var a = v[0];
                return typeof (a) != "undefined";
            }
            catch (e) {
                return false;
            }
        }
        
        if (obj.tagName != "SELECT" && IsArray(obj)) {
            for (var i = 0, oLen = obj.length; i < oLen; i++) {
                doOn(obj[i], type.func);
            }
        }
        else {
            doOn(obj);
        }
    }
该方法的大致意思,将对象obj的特定事件type与特定的方法func进行映射
但是
        if (obj.tagName != "SELECT" && IsArray(obj)) {
            for (var i = 0, oLen = obj.length; i < oLen; i++) {
                doOn(obj[i], type.func);
            }
        }
这一段的用途不太明白
doOn(obj[i], type.func);应该怎么理解,type.func这个参数有什么作用

解决方案 »

  1.   

    doOn是什么函数,这个addEventHandler在什么地方执行的,type是什么?
      

  2.   

    doOn 在addEventHandler 内部已经定义
           var doOn = function(o) {
                if (o.addEventListener) { o.addEventListener(type, func, false); }
                else if (o.attachEvent) { o.attachEvent("on" + type, func); }
                else { o["on" + type] = func; }
            }
    举个例子addEventHandler使用的例子
            var a = document.getElementById("oval1");
            var mouseout1 = function (e) {
                var tar = e.srcElement;
                tar.style.backgroundColor = "";
            }
          addEventHandler(a, 'mouseout',mouseout1 );mouseout IE中onmouseout事件的事件名称
    mouseout1 onmouseout执行时的方法
      

  3.   

    doOn(obj[i], type.func)
    上面这句楼主是不是写错了??
    改为doOn(obj[i], type,func)才说的通
    (因为type传入时只是个string,所以type.func直接调用应该会undefined)
      

  4.   

    我也怀疑过是不是写错了
    但是如果是写错了
    doOn(obj[i])和doOn(obj[i], type,func)有区别吗?
    为什么要多此一举
    doOn定义时也只有一个参数?