为啥在 javascript 中是 = this? [复制]
Posted
技术标签:
【中文标题】为啥在 javascript 中是 = this? [复制]【英文标题】:Why is that = this in javascript? [duplicate]为什么在 javascript 中是 = this? [复制] 【发布时间】:2015-08-10 03:51:43 【问题描述】:我有这样的 js 代码的 sn-p
Customer.prototype.parseAddress = function(data)
this.address = data.address;
Customer.prototype.loadAddress = function()
...
我需要实现 loadAddress 函数。
谁能解释一下为什么这段代码是正确的
var that = this;
$.get('data.xml', function(data)
that.parseAddress(data);
);
以下是不正确的
$.get('data.xml', function(data)
this.parseAddress(data);
);
【问题讨论】:
很难说,因为没有足够大的图片。 “this”指的是封装对象。根据您调用它的位置(或将其分配给变量),它将引用它在其中调用的任何对象。this
inside success $.get()
回调指的是jqXHR对象
取决于它在代码中更改的位置。它是执行上下文。在函数内部,执行上下文与之前不同
这太复杂了,所以你需要在 javascript 中阅读范围。
【参考方案1】:
问题是,当你调用一个函数时,你需要传递函数的上下文,否则,上下文将是查询指定的新上下文。您应该检查以下概念(调用、应用和绑定)。
你可以写:
$.get('data.xml', function(data)
this.parseAddress(data);
.bind(this));
研究它的一个很好的链接参考是: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind
【讨论】:
对不起。你不能使用 call 或 apply,我只是想帮助他解决类似的概念。 谢谢,这个信息很有帮助。 @PedroAugusto 别担心,这以某种方式回答了这个问题;)【参考方案2】:在 Javascript 中,this
是一个特殊的上下文关键字,会根据您使用它的位置而变化。
通过that = this;
,您保存了this
的含义,因此您无需担心this
是否意味着您认为的含义。
my_func = function()
var that = this;
console.log(this); //prints one thing
my_inner_func = function()
console.log(this); //prints another
console.log(that); //prints what the first log printed
my_inner_func();
【讨论】:
你能简单解释一下this
本身是什么吗?
结帐developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…。它在 Python 中基本上是 self.
,但会根据其嵌套深度改变 self
指向的内容。【参考方案3】:
这是因为this
是上下文相关的,可以在回调中更改。
我所说的语句是
this.parseAddress
parseAddress
已在 this
上定义。然而,当回调函数被调用时,this
可能不是你期望的对象,jQuery 做了很多。因此,您无法从回调中访问原始 this
的其他属性。
处理它的最简单方法是保留对原始this
的引用,方法是将其存储在that
中。现在您可以随时引用原始对象并访问更多属性,因为在 jQuery 回调范围内可以访问 that
中的原始引用。
【讨论】:
想解释一下否决票?我不确定答案有什么问题?以上是关于为啥在 javascript 中是 = this? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
在javascript中为啥使用“ var that = this” [重复]
为啥使用javascript函数包装器(在coffeescript中添加)“.call(this)”
将函数放入 javascript 对象中是一种好习惯吗? [复制]