0

所以,我对 javascript 还比较陌生,但仍然无法理解变量范围。所以,我想做的是从函数外部访问一个变量(都在同一个对象内)。

见下文:

function GameCard(imageSource, div)
{
    this.cardImage = new Image();
    this.cardImage.src = imageSource;

    this.imageString = "<img src='" + this.cardImage.src + "' />";

    this.hiddenImage = new Image();
    this.hiddenImage.src = HIDDEN_SOURCE;

    this.clicked = false;

    this.cardDiv = div;

    $(this.cardDiv).click(function() {
        alert(this.imageString);
        $(this).flip({
            direction:'lr',
        });
    });
}

警报(我不幸的调试)说 imageString 在单击处理程序函数中未定义。这是有道理的,我将如何访问它?

在此先感谢,

4

3 回答 3

2

两种方法:首先,您可以存储this在另一个变量中:

var saveThis = this;

在设置“click”处理程序之前,然后在处理程序代码中使用“saveThis”:

$(this.cardDiv).click(function() {
    alert(saveThis.imageString);
    $(saveThis).flip({
        direction:'lr',
    });
});

第二种方式:将处理函数绑定到您想要的对象:

$(this.cardDiv).click(function() {
    alert(this.imageString);
    $(this).flip({
        direction:'lr',
    });
}.bind(this));

第二种方式需要在较旧的 IE 版本中使用 shim

于 2013-04-04T00:26:41.097 回答
1

在函数外部声明一个 imageString var 并在 GameCard 和匿名 click() 事件的函数中使用它。

这两个函数不共享内存空间,因为匿名函数不在 GameCard 的上下文中执行,但它们都共享外部声明的全局变量。

于 2013-04-04T00:28:01.100 回答
1

在这种情况下,“this”指的是 $(this.cardDiv) 而不是父对象。

您可能会考虑拥有一个包含 CardGame 对象之外的所有数据的 javascript 对象

这样,数据的范围就会更高,并且可以从您的方法中访问

于 2013-04-04T00:28:10.207 回答