Javascript"这个"在IE中丢失上下文

时间:2011-03-04 20:22:10

标签: javascript prototype this

以下在firefox / safari / chrome中运行正常,在IE中,“this”似乎在handleEvent()函数中丢失了上下文...警报的结果是[object Window],这不是我的意思想;当从handleEvent()输出时,“this”需要是对HandleClick对象的引用,而不是Window对象。

我是否遗漏了一些在IE中导致此问题的基本内容?

<html>
<head>
<script type="text/javascript">
HandleClick = function(el) {
    this.element = document.getElementById(el);
    if( this.element.addEventListener ) {
        this.element.addEventListener("click", this, false);
    } else {
        if( this.element.attachEvent ) {
            this.element.attachEvent("onclick", this.handleEvent);
        }
    }
}
HandleClick.prototype = {
    handleEvent: function(e) {
        alert(this);
    }
}
</script>
</head>
<body onload="new HandleClick('logo')"></body>
</html>

1 个答案:

答案 0 :(得分:6)

.attachEvent()不会将this作为元素。您需要将处理程序包装在一个函数中,该函数从它所附加的元素的上下文中调用它。

    if( this.element.attachEvent ) {
        var that = this;
        this.element.attachEvent("onclick", function() { 
                                              that.handleEvent.call( that.element );
                                           } );
    }