This question already has answers here: In Javascript, why is the “this” operator inconsistent? (8 answers) Closed 7 years ago .

Say I have the following property method in an object:

onReady: function FlashUpload_onReady() { Alfresco.util.Ajax.jsonGet({ url: Alfresco.constants.PROXY_URI + "org/app/classification", successCallback: { fn: function (o) { var classButtonMenu = [], menuLabel, that = this; var selectButtonClick = function (p_sType, p_aArgs, p_oItem) { var sText = p_oItem.cfg.getProperty("text"); that.classificationSelectButton.set("label", sText); }; for (var i in o.json.items) { classButtonMenu.push({ text: o.json.items[i].classification, value: o.json.items[i].filename, onClick: {fn: selectButtonClick} }); } this.classificationSelectButton = new YAHOO.widget.Button({ id: this.id + "-appClassification", type: "menu", label: classButtonMenu[0].text, name: "appClassification", menu: classButtonMenu, container: this.id + "-appClassificationSection-div" }); }, scope: this }, failureMessage: "Failed to retrieve classifications!" });

It took me some guess work to figure out that in the selectButtonClick function that I needed to reference that instead of this in order to gain access to this.classificationSelectButton (otherwise it comes up undefined ), but I'm uncertain as to why I can't use this . My best guess is that any properties in the overall object that gets referenced within new YAHOO.widget.Button somehow looses scope once the constructor function is called.