addEventListener, Javascript, . ( , , window.alert). Right Thing (tm) Javascript, ( , Microsoft). Javascript, apply call .
, , apply, - . , , :
function proxyAEL(element) {
return function(eventName, handler, phase) {
element.addEventListener(eventName, handler, phase);
}
}
, , , addEventListener. ( , IE IE8 addEventListener, attachEvent.)
, ( , ).
:
var proxy = proxyAEL(document.getElementById('btnGo'));
proxy('click', go, false);
, proxy, ; , . , post , .
:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<title>Test Page</title>
<style type='text/css'>
body {
font-family: sans-serif;
}
#log p {
margin: 0;
padding: 0;
}
</style>
<script type='text/javascript'>
window.onload = pageInit;
function pageInit() {
var proxy;
proxy = proxyAEL(document.getElementById('btnGo'));
proxy('click', go, false);
}
function proxyAEL(element) {
return function(eventName, handler, phase) {
element.addEventListener(eventName, handler, phase);
}
}
function go() {
log('btnGo was clicked!');
}
function log(msg) {
var p = document.createElement('p');
p.innerHTML = msg;
document.getElementById('log').appendChild(p);
}
</script>
</head>
<body><div>
<input type='button' id='btnGo' value='Go'>
<hr>
<div id='log'></div>
</div></body>
</html>
func.apply() vs. func(), , , , , , . : apply , :
, , , this Javascript this , ++, Java #. this Javascript , , , . this , . ( this Javascript .) :
- ;
this . , foo.bar() this foo bar. apply call; this . , bar.apply(foo) bar.call(foo) this foo bar.
apply call , : apply ( ):
bar.apply(foo, [1, 2, 3]);
call :
bar.apply(foo, 1, 2, 3);
, bar, this foo 1, 2 3.