猿问

javascript 实例化对象问题

<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是如何取到的?

小怪兽爱吃肉
浏览 537回答 6
6回答

慕田峪9158850

这就是js中典型的闭包。_this是局部变量,但是function () {        _this.sayHello();    };这个函数是可以访问到这个变量的。我们如果想办法把这个函数在外面调用。就像上面的作为了button的onclick事件的响应函数,或者我们定义一个全局变量,然后把这个函数赋值给它。这个函数和它访问的局部变量就成了一个整体,也就可以访问这个局部变量了。

芜湖不芜

没看懂问题

MYYA

不是闭包问题,只是变量域问题,因为你所声明的_this变量虽然是局部变量,但它的作用域里面能然包含onclick事件。所以自然就能取到了。 如果换成这样 function Click(id) { this.oBtn.onclick = function () { _this.sayHello(); }; var _this = this; this.oBtn = document.getElementById(id);} 你就会发现他是不执行的。因为就是_this作用域发生了改变。

慕桂英3389331

b并且会报错,因为这也不是正常的写法,我只是举例给你看而已。

明月笑刀无情

谢谢回复,你把_this变量声明在了_this.sayHello()语句之前,自然是取不到值的。在你调用_this.sayHello()时,_this还未被赋值,它的值为undefined,自然就会报错。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答