Javascript - 如何访问事件函数中的对象属性?

标签 javascript html events web

我是一名新手程序员。我想以面向对象的方式创建我的脚本。但是我想不出如何保护我的属性(property)并仍然能够访问它。问题是我无法访问函数中的 this.XXX 属性

this.handleStartEvent=function(event)

Firebug 中的错误消息:

"TypeError: this.imgContainer is undefined"

整个脚本如下:

var imageViewer=function(imageWrapper)
{
    var hasTouch = 'ontouchstart' in window,
    resizeEvent = 'onorientationchange' in window ? 'orientationchange' : 'resize',
    startEvent = hasTouch ? 'touchstart' : 'mousedown',
    moveEvent = hasTouch ? 'touchmove' : 'mousemove',
    endEvent = hasTouch ? 'touchend' : 'mouseup',
    cancelEvent = hasTouch ? 'touchcancel' : 'mouseup';

    this.imgContainer=imageWrapper;
    this.image=imageWrapper.getElementsByTagName("img")[0];
    this.initScale=1;
    this.scaleLevel=this.initScale;
    this.startPoint={x:0,y:0}

    //alert(this.image)
    this.initEvents=function()
    {
        window.addEventListener(resizeEvent, this.resizeImageViewer, false);
        this.imgContainer.addEventListener(startEvent, this.handleStartEvent, false);
        this.imgContainer.addEventListener(moveEvent, this.handleMoveEvent, false);
        this.imgContainer.addEventListener(endEvent, this.handleEndEvent, false);
    }

    this.resizeImageViewer=function(event)
    {
        /*not finish*/
    }

    this.handleStartEvent=function(event)
    {
        /**********problem goes here*************/
        this.startPoint.x = event.offsetX || (event.pageX - this.imgContainer.offsetLeft); 
        this.startPoint.y = event.offsetY || (event.pageY - this.imgContainer.offsetTop);
    }

    this.handleMoveEvent=function(event)
    {
        /*not finish*/
    }

    this.handleEndEvent=function()
    {
        /*not finish*/
    }

    this.initEvents();
}

var imageViewerObj = new imageViewer(document.getElementById("imageWrapper"));

我知道 this 将是 imgContainer,而不是 imageViewer,但我不知道如何获取我的 imageViewer 的属性,如 startPointinitScale。有人可以指导我一下吗?

最佳答案

如果您想保留对 this 的引用,只需将其保存在其他变量中即可:

var imageViewer = function(imageWrapper)
{
    var self = this; // use "self" instead of "this" later

    ...

    self.startPoint={x:0,y:0}

    self.initEvents=function()
    {
        window.addEventListener(resizeEvent, self.resizeImageViewer, false);
        self.imgContainer.addEventListener(startEvent, self.handleStartEvent, false);
        self.imgContainer.addEventListener(moveEvent, self.handleMoveEvent, false);
        self.imgContainer.addEventListener(endEvent, self.handleEndEvent, false);
    }

    ...

    self.initEvents();
}

关于Javascript - 如何访问事件函数中的对象属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11863221/

相关文章:

html - 如何使用 div 而不是表格

python - 具有 'externally' 更新属性的 PyTango 设备

c++ - 将使用 CreateEvent 和 WaitForMultipleObjects 的程序移植到 Linux

html - 以百分比创建一个CSS三 Angular 形

javascript - 使用javascript或html5编辑txt文件

c# - 这个警告是什么意思(关于修改数据和 DataTable.RowChanged 事件的 MSDN 文档)?

javascript - 你如何检查 xsi :nil when parsing XML in Javascript?

javascript 构造函数 + Node js createServer

javascript - 使用从数据库检索的数据显示多个实时倒计时

javascript - 使div可滚动而不设置高度