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 );
}
i am new to javascript, the above code is from the internet. i don't understand the above function well, expect someone can explain it to me. thank you, why it declare three argument(obj, type, fn). obj['e'+type+fn] what's开发者_StackOverflow this line meaning.
obj['e'+type+fn] accesses the attribute of obj with the name 'e' + type + fn.
With type='abc' and fn='foo', it would access obj.eabcfoo.
In JavaScript, there is an equivalence between objects and hash sets. Thus, saying obj['abc']=123; is equivalent to obj.abc=123. By using the hash set notation, you can build your property names dynamically - in this case by concatenating 'e' with the values of type and fn.
This function accepts three parameters:
- An object (specifically, a DOM node) that it will set an event handler on
- The event which will have the handler attached to it (e.g. "click")
- A function which is the event handler
It then creates two "helper" functions and uses them to assign the event handler:
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
The lines with the obj[something] syntax are simply accessing (getting/setting) a member of obj whose name is variable. For example, this:
var name = "alert";
window[name]();
does the same thing as this:
window.alert();
However, in the first case you have the value of name coming from a variable instead of being hardcoded.
It's used to attach events to objects dynamically.
For example to assign click event to some element:
var oDiv = document.getElementById("myDiv");
bind(oDiv, "click", MyClickHandler);
This will bind the click event of element with ID myDiv and execute function called MyClickHandler when that element is clicked.
Working example: http://jsfiddle.net/sDwvP/
These days such things are considered "old school" or obsolete, you better use full scale library like jQuery.
加载中,请稍侯......
精彩评论