<script type="text/javascript">
function BigComputer(answer) {
this.the_answer = answer;
this.ask_question = function () {
alert(this.the_answer);
}
}
function addhandler() {
var deep_thought = new BigComputer(42),
the_button = document.getElementById('thebutton');
the_button.onclick = deep_thought.ask_question;
}
window.onload = addhandler;
</script>
为什么这个脚本返回 undefined 而不是 42?这就是我理解的方式:
1)在网页加载时,我们运行“addhandler”方法。
2) 在这个方法中,我们为 deep_thought 变量创建 BipComputer 的实例。此外,我们在答案中设置了 42(BipComputer 类中的公共变量)
3)然后我们为按钮设置了引用(在 html 文件中)
4)按钮在点击时处于活动状态,这就是魔法:
在我看来应该打印出编号 42,因为我们刚刚在步骤 2 中为此进行了设置,但是变量是“未定义”?
另一个问题是,在没有 ()(没有要传递的参数时)和使用 () 的情况下运行方法有什么区别。[像 addhandler 方法]。
也许这个问题很简单,但我以前用 java 和 php 编程,现在面向 javascript 编程的思维方式对我来说很奇怪。函数看起来像类,类看起来像函数,没有真正的构造函数之类的东西。
但没关系,让我们回到问题上来 :)
我非常感谢任何帮助。
@编辑
感谢@lbstr,我找到了有用的链接,对于每个和我问同样问题的人来说。 http://web.archive.org/web/20080209105120/http://blog.morrisjohns.com/javascript_closures_for_dummies