为了账号安全,请及时绑定邮箱和手机立即绑定

用“ var that = this”理解Javascript范围

用“ var that = this”理解Javascript范围

犯罪嫌疑人X 2019-11-28 13:47:59
说我在对象中具有以下属性方法:  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函数内部被引用。


查看完整回答
反对 回复 2019-11-28
  • 3 回答
  • 0 关注
  • 885 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信