用“var that = this”理解Javascript范围
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了用“var that = this”理解Javascript范围,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2380字,纯文字阅读大概需要4分钟。
内容图文
![用“var that = this”理解Javascript范围](/upload/InfoBanner/zyjiaocheng/715/340b12a40a9e4434bbf554b6d224fbd0.jpg)
参见英文答案 > In Javascript, why is the “this” operator inconsistent? 8个
假设我在对象中有以下属性方法:
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函数中我需要引用而不是为了获取对this.classificationSelectButton的访问权限(否则它是未定义的),但我不确定为什么我可以不要用这个.我最好的猜测是,一旦调用构造函数,在新的YAHOO.widget.Button中引用的整个对象中的任何属性都会以某种方式失去作用域.
有人可以解释为什么我必须引用classificationSelectButton和var that = this而不是仅仅调用`this.classificationSelectButton’?
解决方法:
最重要的是要理解一个函数对象没有固定的这个值 – 它的值会根据函数的调用方式而改变.我们说一个函数是用一些特定的值调用的 – 这个值是在调用时确定的,而不是定义时间.
>如果函数被称为“原始”函数(例如,只执行someFunc()),这将是全局对象(浏览器中的窗口)(如果函数以严格模式运行,则为undefined).
>如果将它作为对象的方法调用,则它将是调用对象.
>如果使用call或apply调用函数,则将其指定为调用或应用的第一个参数.
>如果它被称为事件监听器(就像在这里一样),那么这将是事件目标的元素.
>如果将其作为带有new的构造函数调用,则这将是一个新创建的对象,其原型设置为构造函数的prototype属性.
>如果函数是bind操作的结果,则该函数将始终并永远将此设置为生成它的bind调用的第一个参数. (这是“函数没有固定的”规则的唯一例外 – bind生成的函数实际上确实有一个不可变的.)
使用var that = this;是一种在函数定义时存储此值的方法(而不是函数执行时间,这可能是任何事情,具体取决于函数的调用方式).这里的解决方案是将this的外部值存储在一个变量(传统上称为self或self)中,该变量包含在新定义的函数的范围内,因为新定义的函数可以访问在其外部作用域中定义的变量.
内容总结
以上是互联网集市为您收集整理的用“var that = this”理解Javascript范围全部内容,希望文章能够帮你解决用“var that = this”理解Javascript范围所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。