I want to create a javascript library, so I thought making it an immediately self executing function would be a nice thing to do to ensure scope safety and everything.
But now I’m running into a problem with using the “this” keyword that I don’t quite understand.
How can I make a code like this work correctly? Currently, it tells me that “image” is undefined.
(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();
How can I access the image property?
I think you have a few issues here:
partsin yourinitfunction without accessing it as a property ofthis.eachblock, you are accessingimageas a global variable but it is not declared globally. You can’t accessimagefromthisin that block because in that context,thisis actually set to the item you are iterating on. (That is why you can accessthis.num.)I sugggest you include var that = this; before your init function and use it when accessing properties like that.image.