首页 > 试题广场 >

阅读以下JavaScript代码后,回答问题。

[问答题]
阅读以下JavaScript代码:
 if (window.addEventListener) {
        var addListener = function(el, type, listener, useCapture) {
            el.addEventListener(type, listener, useCapture);
        };
    } else if (document.all) {
        addListener = function(el, type, listener) {
            el.attachEvent("on" + type, function() {
                listener.apply(el);
            });
        };
    }
请阐述 a) 代码的功能; b) 代码的优点和缺点; c) listener.apply(el) 在此处的作用; d) 如果有可改进之处,请给出改进后的代码,并说明理由。
a.实现DOM2级事件绑定函数的兼容写法
b.缺点:不能用docuement.all来确定是否为IE浏览器,
    优点,用appy重新指定了IE下的this
c.重新将函数内的this指向el
d.

var addEvent = function(element,type,callback,capture){     var capture = capture || false; if(element.addEventListener){
            element.addEventListener(type,callback,capture);
        }else if(element.attachEvent){
            element.attachEvent('on' + type,function(){
                callback.apply(element);
            })
        }
        
    } 

发表于 2017-08-07 22:26:19 回复(0)
a)增加组件监听事件功能。
b)优点是能快速的给组件增加新的事件的功能。缺点是第二个addListener声明应当写在外面,或是加上var,否则成了全局函数。还没考虑其它的浏览器的兼容性,并且上下定义的函数参数个数不一样。
c)作用是让el做为调用者执行listener函数。
D) addListener = function(el,type, listener, useCapture ) {
  if (window.addEventListener) {
 el.addEventListener(type, listener, useCapture);
    } else if ( document . all ) {
 el.attachEvent("on" + type, function() { listener.apply(el); });
    }  
}
发表于 2014-11-13 15:10:21 回复(0)
a)代码为指定元素添加指定类型的事件。
b)优点:
兼容IE、Chrom、Firefox等主流浏览器
缺点:
每次判断addListener都要重新赋值
c)改变作用域,使this指向绑定事件的元素。
d)
var addListener = function(el, type, listener, useCapture ) {
        if (window.addEventListener) {
            el.addEventListener(type, listener, useCapture);
        } else {
            el.attachEvent("on" + type, function() {
                listener.apply(el);
            });
        }
    };
发表于 2016-08-05 19:59:39 回复(0)
1、事件绑定的一个简单函数封装;
2、优点:函数封装可随时引用,没有解决兼容性的问题;缺点:代码冗余
3、作用是改变this指向的问题,不用则指向window而不是调动它的事件对象
function bind(obj, evname, fn){
    if(obj.addEventListener){
       obj.addEventListener(evname, fn, false); 
   } else {
      obj.attachEvent('on'+evname, function(){
         fn.apply(obj);  
       });
   }
}
发表于 2015-03-26 17:21:42 回复(0)
晕头像
判断浏览器,dom2级事件绑定 
有优点,ie和标准浏览器分别处理,缺点不知道
this关键字的转移,因为ie中dom2级事件绑定this关键字的指向都是window,我们要人为的把this指向当前作用的对象
发表于 2014-12-25 17:13:35 回复(0)
addEventListener存在兼容性,还需配合attachEvent才能解决兼容性问题
.apply是一直找自己的父级,如果父级没有,就一直往上找

发表于 2014-12-22 21:12:13 回复(0)
a、考略兼容性的事件绑定函数
b、兼容ie好w3c标准的事件监听的函数,易于使用。
c、将绑定元素加入到ie事件监听处理函数的参数里。
d、完全兼容的化再加上else {
            element["on" + type] = handler;
        }
发表于 2014-12-16 21:33:47 回复(0)
1.兼容ie浏览器的事件敏感词
2.兼容了ie的事件监听事件attachEvent,但是没有将事件对象回传给回调函数。
3.调用事件的回调函数。
4.
 el.attachEvent("on" + type, function(e) { listener.apply(el,e); });
发表于 2014-12-11 21:54:32 回复(0)
a,对不同浏览器绑定事件
发表于 2014-11-27 21:45:22 回复(0)
a) 为页面添加事件
b)可兼容不同浏览器
c)调用事件方法

发表于 2014-11-26 10:54:02 回复(0)
a)实现事件绑定;b)优点:考虑全面 缺点:浪费了高级函数,变量污染c)因为function中的listener指向需要被纠正成element
function addListener(obj,type,listener,useCapture){
    if(window.addEventListener){
        obj.addEventListener(type,listener,useCapture);
    else{
        obj.attachEvent(type,fu);
    }
}
发表于 2014-11-23 13:23:19 回复(0)
a.事件监听
发表于 2014-11-20 11:23:22 回复(0)
@@头像 @@
事件绑定可以重复绑定事件把事件的this设置给el
发表于 2014-11-14 16:25:58 回复(0)
a.定义给元素添加事件的函数
b.优点:兼容浏览器;缺点:应将变量addListener生命到函数顶部;
c.将listenser函数的上下文定义为el
发表于 2014-11-14 11:10:42 回复(0)
a:事件监听;
b:优点是兼容了w3c标准浏览器和ie
c:返回自身;
function(element, type, handler) {
  return element.addEventListener ? element.addEventListener(type, handler, false) : element.attachEvent("on" + type, handler)
 }
发表于 2014-11-12 16:12:59 回复(0)
a 监听
发表于 2014-11-10 17:05:03 回复(0)
代码用来添加事件侦听,绑定事件。    
listener.apply(el)用来修改this指向

发表于 2014-11-10 14:37:08 回复(0)
a)代码的功能是给window窗体增加事件
b)代码优缺点
c)listener.apply(el)将el中的所用属性和方法赋予给所有的元素 
发表于 2014-11-09 21:55:38 回复(0)
a) 判断浏览器是否支持标准的 addEventListerner 方法,不支持的话通过 document.all 判断其是不是旧版本的 ie ,是的话使用 attachEvent 绑定事件
b) 优点是保证了 addListener 在标准浏览器和 ie 上面的正常工作;缺点是意图并不明显(建议使用如 browser.isIE 这样的方法,至少应当加上注释!),然后第二个方法应当将 window.event 传给 listerner
c)保证 listener 内部使用的 this 正确指向了 el
d)懒得解释了,按我的想法重写
var addListener = function(elem, type, callback, capture) {
  if (elem.addEventListener)
    elem.addEventListener(type, callback, capture)
  else if (elem.attachEvent)
    elem.attachEvent('on'+type, function() {
      callback.apply(elem, window.event)
    })
}
发表于 2014-11-06 20:17:39 回复(0)
兼容IE的事件监听
发表于 2014-11-05 14:08:57 回复(0)