所以,我对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。这有道理,我将如何访问它?
提前致谢, Ĵ
答案 0 :(得分: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版本中,第二种方式需要a shim。
答案 1 :(得分:1)
在函数外部声明一个var的imageString,并在GameCard和匿名click()事件的函数中使用它。
这两个函数不共享内存空间,因为匿名函数不是在GameCard的上下文中执行的,但它们都共享在外面声明的全局变量。
答案 2 :(得分:1)
在这种情况下,“this”指的是$(this.cardDiv),而不是父对象。
您可以考虑使用包含CardGame对象之外的所有数据的javascript对象
这样,数据的范围可以更高,并可以从您的方法中访问