什么是javascript中的行含义

时间:2011-05-08 12:03:45

标签: javascript

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

我是javascript的新手,上面的代码来自互联网。我不太了解上述功能,希望有人可以向我解释。谢谢,为什么它声明了三个参数(obj,type,fn)。 obj['e'+type+fn]这条线意味着什么。

4 个答案:

答案 0 :(得分:2)

obj['e'+type+fn]使用名称obj访问'e' + type + fn的属性。

使用type='abc'fn='foo',它将访问obj.eabcfoo

答案 1 :(得分:2)

在JavaScript中,对象和散列集之间存在等价关系。因此,说obj['abc']=123;等同于obj.abc=123。通过使用哈希集表示法,您可以动态构建属性名称 - 在这种情况下,通过将'e'typefn的值连接起来。

答案 2 :(得分:1)

此功能接受三个参数:

  1. 将在
  2. 上设置事件处理程序的对象(具体而言,是DOM节点)
  3. 将附加处理程序的事件(例如“click”)
  4. 作为事件处理程序的函数
  5. 然后创建两个“辅助”函数并使用它们来分配事件处理程序:

    obj['e'+type+fn] = fn; // helper #1
    obj[type+fn] = function(){obj['e'+type+fn]( window.event );} // helper #2
    obj.attachEvent( 'on'+type, obj[type+fn] ); // assigns event handler
    

    具有obj[something]语法的行只是访问(获取/设置)名称为变量的obj成员。例如,这个:

    var name = "alert";
    window[name]();
    

    做同样的事情:

    window.alert();
    

    但是,在第一种情况下,您的name值来自变量,而不是硬编码。

答案 3 :(得分:1)

它用于动态地将事件附加到对象。

例如,将click事件分配给某个元素:

var oDiv = document.getElementById("myDiv");
bind(oDiv, "click", MyClickHandler);

这将绑定ID为click的元素的myDiv事件,并在单击该元素时执行名为MyClickHandler的函数。

工作示例:http://jsfiddle.net/sDwvP/

现在这些东西被认为是“老派”或过时的,你最好使用像jQuery这样的全尺寸库。