如何在 class 方法中获取当前对象引用?
How to get the current object reference in a class method?
平时在Java上开发,现在在研究JavaScript/HTML5Canvas的东西。从 Java 开发人员的角度来看,我遇到了一个奇怪的情况。
在html页面上有一个html5canvas对象,我想跟踪这个canvas上的鼠标点击事件。
我声明了 class 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);
}
还有一个class方法来处理鼠标点击事件:
GameBoard.prototype.handleMouseClick = function(event) {
alert(this.myProperty);
}
handleMouseClick()
会显示undefined
因为handleMouseClick()
方法中的this
引用了HTML5Canvas实例(boardCanvas).
我的问题:如何引用 handleMouseClick
方法中的当前 GameBoard
class 实例来获取 class 中定义的 myProperty
字段值构造函数?
我这里做错了什么?
谢谢。
您可以使用 bind 来为函数
设置 this
this.boardCanvas.addEventListener("mousedown", this.handleMouseClick.bind(this), false);
一个常见的约定是使用 this
的别名,通常带有一个名为 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);
}
但是,由于您是在此处定义 prototype
上的方法,因此您可以使用 bind
(如@Alexander 所建议的那样)或试试这个:
var self = this;
this.boardCanvas.addEventListener("mousedown", function(e)
{
// calling the function with 'self/this' context
self.handleMouseClick(e);
}, false);
(感谢@Alexander 的贡献)
平时在Java上开发,现在在研究JavaScript/HTML5Canvas的东西。从 Java 开发人员的角度来看,我遇到了一个奇怪的情况。
在html页面上有一个html5canvas对象,我想跟踪这个canvas上的鼠标点击事件。
我声明了 class 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);
}
还有一个class方法来处理鼠标点击事件:
GameBoard.prototype.handleMouseClick = function(event) {
alert(this.myProperty);
}
handleMouseClick()
会显示undefined
因为handleMouseClick()
方法中的this
引用了HTML5Canvas实例(boardCanvas).
我的问题:如何引用 handleMouseClick
方法中的当前 GameBoard
class 实例来获取 class 中定义的 myProperty
字段值构造函数?
我这里做错了什么?
谢谢。
您可以使用 bind 来为函数
设置this
this.boardCanvas.addEventListener("mousedown", this.handleMouseClick.bind(this), false);
一个常见的约定是使用 this
的别名,通常带有一个名为 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);
}
但是,由于您是在此处定义 prototype
上的方法,因此您可以使用 bind
(如@Alexander 所建议的那样)或试试这个:
var self = this;
this.boardCanvas.addEventListener("mousedown", function(e)
{
// calling the function with 'self/this' context
self.handleMouseClick(e);
}, false);
(感谢@Alexander 的贡献)