Javascript 立即自动执行功能和;这";
我想创建一个javascript库,所以我认为让它成为一个立即自动执行的函数是一件很好的事情,可以确保范围安全和一切 但是现在我在使用“this”关键字时遇到了一个我不太理解的问题 如何使这样的代码正确工作?目前,它告诉我“图像”是未定义的Javascript 立即自动执行功能和;这";,javascript,scope,execute-immediate,Javascript,Scope,Execute Immediate,我想创建一个javascript库,所以我认为让它成为一个立即自动执行的函数是一件很好的事情,可以确保范围安全和一切 但是现在我在使用“this”关键字时遇到了一个我不太理解的问题 如何使这样的代码正确工作?目前,它告诉我“图像”是未定义的 (function() { function lib() { this.image = document.getElementById("image"); this.parts = [ {na
(function() {
function lib() {
this.image = document.getElementById("image");
this.parts = [
{name: "part1", num: "1"}
];
this.init = function() {
$(parts).each(function() {
var partNum = this.num;
image.getElementById(partNum).addEventListener("click", function() {
toggleHighlight(partNum);
}, true);
});
};
}
window.lib = new lib();
})();
window.lib.init();
如何访问
image
属性?如果我理解正确,您希望从您提供给每个函数的匿名函数访问库中定义的此.image
属性。为此,您需要保留此
,以使其在匿名函数中可用:
this.init = function() {
var self = this;
$(parts).each(function() {
//do something with self.image
self.image;
});
};
我想你有一些问题:
- 您正在
init
函数中引用部分
,而没有将其作为此
的属性进行访问
- 在
每个
块中,您将作为全局变量访问图像
,但它不是全局声明的。您无法从该块中的this
访问图像
,因为在该上下文中,this
实际上被设置为您正在迭代的项目。(这就是为什么您可以访问this.num
)
我建议你包括var=this;在您的init函数之前,并在访问类似.image的属性时使用它
var that = this;
this.init = function() {
$(this.parts).each(function() {
var partNum = this.num;
that.image.getElementById(partNum).addEventListener("click", function() {
toggleHighlight(partNum);
}, true);
});
};
您还应该将函数名lib
的第一个字母大写,因为您希望它用作带有new
关键字的构造函数。看看Javascript好部分的作者说了些什么。您是否尝试过在FireBug或Opera DragonFly之类的工具中进行调试?大多数情况下,您可以看到当前范围是什么以及定义了哪些变量。