0

これが最初です:

function addEvent(el, type, fn){
    if(el.addEventListener){
        el.addEventListener(type, fn, false);
    }else{
        el[fn] = function(){
            fn.call(el, window.event);
        }
        el.attachEvent('on'+type, el[fn]);
    }
}

そして2番目:

function addEvent(el, type, fn){
    if(el.addEventListener){
        el.addEventListener(type, fn, false);
    }else{  
        el['e' + fn] = function(){
            fn.call(el, window.event);
        }
        el.attachEvent('on'+type, el['e'+fn]);
    }
}

2つ目はプレフィックスを追加するだけですが、何に使用されますか?

4

1 に答える 1

1

どちらの関数も同じことをしようとしているように見えます。つまり、ブラウザー間で一貫した方法でイベントハンドラーをバインドします(つまり、サポートしていない古いバージョンのIE .addEventListener())。メソッドが使用可能な場合はそれが使用され、そうでない場合は、イベントオブジェクトの.addEventListener()適切な値を使用してコールバック関数が呼び出されるようにするプロキシ関数が作成されます。this

違いは、要素のプロパティを作成して後で参照する場合との違いのみel[fn]ですel['e' + fn]

    el[fn] = function(){
        fn.call(el, window.event);
    }

fnパラメータはaddEvent()関数参照である必要があります。関数参照をプロパティ名として使用するとどうなるかはわかりませんが、基本的toString()に関数に対して実行され、結果をプロパティ名として使用すると思います。したがってel['e' + fn]、同じことを行いますが'e'、最初に追加します。「e」に特別な意味があるとは思いません。

于 2012-05-23T05:04:39.403 に答える