Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在类方法中获取当前对象引用?_Javascript - Fatal编程技术网

Javascript 如何在类方法中获取当前对象引用?

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

通常我在Java上开发,现在我正在研究JavaScript/HTML5画布。从Java开发者的角度来看,我遇到了一个奇怪的情况

html页面上有一个html5画布对象,我想跟踪这个画布上的鼠标点击事件

我声明了类
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