1

有任何有趣的文章警告 JS 问题。

但是,请注意 #2:

<input type="button" value="Gotcha!" id="MyButton" >
<script>
var MyObject = function () {
    this.alertMessage = "Javascript rules";
    this.ClickHandler = function() {
          alert(this.alertMessage );
      }
}();

</script>

注意最后的自执行功能()。但是我很确定this.xxx在做new MyObject(). 他写了 :

如果你打电话MyObject.ClickHandler();,你会得到一个弹出窗口,上面写着“Javascript 规则”。

他的样本不起作用。我试过MyObject.ClickHandler()了,但遇到了一个错误......(无法调用未定义的方法'ClickHandler')

我怎样才能MyObject.ClickHandler()工作?

4

2 回答 2

4

您缺少new关键字。目前,this指的是window并且ClickHandler可以通过window.ClickHandler.

使用new关键字时,会创建一个新对象,并且this关键字将引用该新创建的对象。这就是为什么将ClickHandler方法添加到MyObject下面的原因:

var MyObject = new (function () {
    this.alertMessage = "Javascript rules";
    this.ClickHandler = function () {
        alert(this.alertMessage);
    };
})();

执行以下操作时要小心:

document.getElementById("MyButton")
    .addEventListener("click", MyObject.ClickHandler, false);

addEventListenermakethis引用分配了事件侦听器的对象。另请参阅bind更改this范围。

于 2012-05-22T19:25:18.877 回答
2

编辑: Zoiks,Lekensteyn 一针见血。我不完全明白你打算在这里完成什么......


这不完全是一个“自动执行功能”。如果你是这样构建的:

(function(MyObject) {
    MyObject.alertMessage = "Javascript rules";
    MyObject.ClickHandler = function() {
        alert(this.alertMessage );
    }
})(window.MyObject = window.MyObject || {});

然后我将其称为自执行功能。

完成此操作后,现在您可以执行MyObject.ClickHandler()并获取警报。

于 2012-05-22T19:26:04.987 回答