1

私は初心者のプログラマーです。オブジェクト指向の方法でスクリプトを作成したい。ただし、自分のプロパティを保護し、アクセスできるようにする方法がわかりません。問題は、関数で自分のthis.XXXプロパティにアクセスできないことです

this.handleStartEvent=function(event)

Firebug のエラー メッセージ:

「TypeError: this.imgContainer は未​​定義です」

スクリプト全体は次のとおりです。

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なることはわかっていますが、やのようなプロパティを取得する方法がわかりません。誰かが私を少し案内してもらえますか?imgContainerimageViewerimageViewerstartPointinitScale

4

2 に答える 2

1

参照を保持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();
}
于 2012-08-08T11:17:24.613 に答える
0

imgContainer が親のthis.parent.getAttribute(...);場合、子の場合に使用できますthis.parent.getChildAt( index ).getAttribute(...);

index を、選択する要素の番号 (インデックス) に置き換えます。最初の子が好きな場合は、<div><div class="wannaselectthat"></div></div>インデックスをゼロに設定します。

于 2012-08-08T11:13:59.327 に答える