JavaScript call apply 绑定对象使用
当单击DIV后,弹出框显示undefined。
原因是当DOM对象响应单击事件后,事件方法中的this关键字指向的是DOM对象,此时DOM对象没有a属性,所以弹出undefined。
而程序员本意是响应事件方法中this指向的是classA的对象a,如何才能达到此目的?这就需要使用到call或apply方法。
代码如下 | |
<html> <head> <title>apply_and_call</title> </head> <body onload="init()"> <div id="testDiv" style="position: absolute; border: 1px solid gray; width:100px; height: 100px"></div> <script type="text/javascript"> function init() { var el = document.getElementById("testDiv"); var a = new classA(el); } function classA(el) { this.a = 1; this.container = el; //绑定单击事件 this.container.onclick = this.click; } classA.prototype = { click:function() { alert(this.a); } } </script> </body> </html> |
下面再来熟悉下call方法:
摘要:
function.call(thisobj, args…)
参数:
thisobj
调用function的对象。在函数主体中,thisobj是关键字this的值。
args…
任意多个参数,这些参数将传递给函数function。
返回值:
调用函数function的返回值。
抛出:
TypeError
如果调用该函数的对象不是函数,则抛出该异常。
描述:
call()将指定的函数function作为对象thisobj的方法来调用,把参数列表中thisobj后的参数传递给它,返回值是调用函数后的返回值。在函数体内,关键字this引用thisobj对象。
如果将指定数组作为传递给函数的参数,请使用Function.apply()方法。
熟悉call()方法后,将代码1修改如下
代码如下 | |
<html> |