<html>
<head>
<script>window.onload = function () { new Click("btn");};
function Click(id) { var _this = this; this.oBtn = document.getElementById(id); this.oBtn.onclick = function () { _this.sayHello(); };}
Click.prototype.sayHello = function () { alert("Hello World!");};</script></head>
<body><input id="btn" type="button" value="button" /></body></html>
问题是实例化对象后即new Click("btn")之后,构造函数中的私有静态变量_this是如何取到的?
6 回答
慕田峪9158850
TA贡献1794条经验 获得超7个赞
这就是js中典型的闭包。_this是局部变量,但是function () {
_this.sayHello();
};这个函数是可以访问到这个变量的。我们如果想办法把这个函数在外面调用。就像上面的作为了button的onclick事件的响应函数,或者我们定义一个全局变量,然后把这个函数赋值给它。这个函数和它访问的局部变量就成了一个整体,也就可以访问这个局部变量了。
MYYA
TA贡献1868条经验 获得超4个赞
不是闭包问题,只是变量域问题,因为你所声明的_this变量虽然是局部变量,但它的作用域里面能然包含onclick事件。所以自然就能取到了。
如果换成这样
function Click(id) {
this.oBtn.onclick = function () {
_this.sayHello();
};
var _this = this;
this.oBtn = document.getElementById(id);
}
你就会发现他是不执行的。因为就是_this作用域发生了改变。
明月笑刀无情
TA贡献1828条经验 获得超4个赞
谢谢回复,你把_this变量声明在了_this.sayHello()语句之前,自然是取不到值的。在你调用_this.sayHello()时,_this还未被赋值,它的值为undefined,自然就会报错。
添加回答
举报
0/150
提交
取消