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]
这条线意味着什么。
答案 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'
与type
和fn
的值连接起来。
答案 2 :(得分:1)
此功能接受三个参数:
然后创建两个“辅助”函数并使用它们来分配事件处理程序:
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这样的全尺寸库。