Javascript 如何在类方法中获取当前对象引用?
通常我在Java上开发,现在我正在研究JavaScript/HTML5画布。从Java开发者的角度来看,我遇到了一个奇怪的情况 html页面上有一个html5画布对象,我想跟踪这个画布上的鼠标点击事件 我声明了类Javascript 如何在类方法中获取当前对象引用?,javascript,Javascript,通常我在Java上开发,现在我正在研究JavaScript/HTML5画布。从Java开发者的角度来看,我遇到了一个奇怪的情况 html页面上有一个html5画布对象,我想跟踪这个画布上的鼠标点击事件 我声明了类GameBoard,并初始化了它的属性: function GameBoard() { // defining a property for GameBoard class instance this.myProperty = 'some text here'; // ge
GameBoard
,并初始化了它的属性:
function GameBoard() {
// defining a property for GameBoard class instance
this.myProperty = 'some text here';
// getting canvas element
this.boardCanvas = document.getElementById("myCanvas");
// setting the mouse click event listener
this.boardCanvas.addEventListener("mousedown", this.handleMouseClick, false);
}
还有一个类方法可以处理鼠标单击事件:
GameBoard.prototype.handleMouseClick = function(event) {
alert(this.myProperty);
}
handleMouseClick()
将显示undefined
,因为handleMouseClick()中的此方法引用HTML5画布实例(boardCanvas)
我的问题:如何在handleMouseClick
方法中引用当前GameBoard
类实例,以获取类构造函数中定义的myProperty
字段值
我做错了什么
谢谢。您可以使用设置此功能的
this.boardCanvas.addEventListener("mousedown", this.handleMouseClick.bind(this), false);
示例:常见的约定之一是使用别名此
,通常使用名为self的变量:
function GameBoard() {
// defining alias
var self = this;
this.myProperty = 'some text here';
this.boardCanvas = document.getElementById("myCanvas");
this.handleMouseClick = function()
{
// using alias
alert(self.myProperty);
};
this.boardCanvas.addEventListener("mousedown", this.handleMouseClick, false);
}
但是,由于您在这里定义原型
上的方法,因此您可以使用绑定
(由@Alexander提出)或尝试以下方法:
var self = this;
this.boardCanvas.addEventListener("mousedown", function(e)
{
// calling the function with 'self/this' context
self.handleMouseClick(e);
}, false);
(感谢@Alexander的贡献)在call的例子中,我认为应该是这样的self.handleMouseClick.call(self,e);-我认为,在我们的例子中,使用“call”是没有意义的,因为如果您调用self.handlemouse,单击(e)“this”将引用GameBoard