prototype
今天我在使用 Javascript和this
参考时遇到了一个非常奇怪的问题。
基本上,我有两个对象。一个对象使用了一个div
元素,并且可以onclick
在div
. 另一个对象利用此功能并onclick
使用第一个对象注册事件。
这是代码:
我的第一个对象,它负责div
:
DivObject = function() {};
DivObject.prototype.setClickListener = function(clickListener){
document.getElementById("myDiv").onclick = function(e){
clickListener(e);
};
};
我的第二个对象使用此功能:
MainObject = function(){
this.myString = "Teststring";
this.divObj = new DivObject();
this.divObj.setClickListener(this.handleClick);
};
MainObject.prototype.handleClick = function(e){
// do something with e
};
问题是,在内部MainObject.prototype.handleClick
,this
引用指的是window
对象,而不是MainObject
. 所以,console.log(this)
在这个函数里面 logs [Object window]
。
作为一种解决方法,我使用setClickListener
如下函数:
var thisRef = this;
this.divObj.setClickListener(function(e){
thisRef.handleClick(e);
});
现在,this
我的handleClick
函数中的引用指的是我的MainObject
(如我所愿)。
我的问题是:
为什么this
引用一次引用window
对象,一次this
引用我的对象?它是否在某处被覆盖?我一直认为this
在我的对象中使用我可以确定它真的是this
我的对象的引用?我现在使用的解决方法是应该如何解决这个问题,还是有其他更好的方法来处理这种情况?