说我在对象中具有以下属性方法: 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!" });我花了一些猜测才能弄清楚在selectButtonClick我需要引用的函数中(that而不是this为了获得访问权)this.classificationSelectButton(否则就会出现undefined),但是我不确定为什么不能使用this。我最好的猜测是,new YAHOO.widget.Button一旦调用了构造函数,整个对象中任何被某种方式引用的属性都会失去作用域。有人可以解释为什么我必须引用classificationSelectButton它var that = this而不是仅仅调用`this.classificationSelectButton'吗?
3 回答
偶然的你
TA贡献1841条经验 获得超3个赞
因为this
根据其运行的上下文更改其值。
在selectButtonClick
函数内部,this
将引用该函数的上下文,而不是外部上下文。因此,您需要this
在外部上下文中给不同的名称,该名称可以在selectButtonClick
函数内部被引用。
添加回答
举报
0/150
提交
取消