<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是如何取到的?
这就是js中典型的闭包。_this是局部变量,但是function () {
_this.sayHello();
};这个函数是可以访问到这个变量的。我们如果想办法把这个函数在外面调用。就像上面的作为了button的onclick事件的响应函数,或者我们定义一个全局变量,然后把这个函数赋值给它。这个函数和它访问的局部变量就成了一个整体,也就可以访问这个局部变量了。
我也感觉是闭包,但不太肯定,谢了谢了
没看懂问题
js新手,问题问的可能不太明朗,但还是谢谢你的回复
不是闭包问题,只是变量域问题,因为你所声明的_this变量虽然是局部变量,但它的作用域里面能然包含onclick事件。所以自然就能取到了。
如果换成这样
function Click(id) {
this.oBtn.onclick = function () {
_this.sayHello();
};
var _this = this;
this.oBtn = document.getElementById(id);
}
你就会发现他是不执行的。因为就是_this作用域发生了改变。
b并且会报错,因为这也不是正常的写法,我只是举例给你看而已。
谢谢回复,你把_this变量声明在了_this.sayHello()语句之前,自然是取不到值的。在你调用_this.sayHello()时,_this还未被赋值,它的值为undefined,自然就会报错。