var that = this - 你能帮我理解吗[重复]
Posted
技术标签:
【中文标题】var that = this - 你能帮我理解吗[重复]【英文标题】:var that = this - can you please help me understand [duplicate] 【发布时间】:2012-06-05 03:50:51 【问题描述】:可能重复:What does var that = this; mean in javascript?
我经常在 Javascript 代码中找到这个作业:
var that = this;
这是一个例子:
function Shape(x, y)
var that= this;
this.x = x;
this.y = y;
this.toString= function()
return 'Shape at ' + that.x + ', ' + that.y;
;
您能解释一下为什么需要这样做吗?
请记住,我非常熟悉 php 或 Java,但不熟悉 Javascript 对象模型。
【问题讨论】:
几个小时前没有关于这个主题的另一个问题吗? OFF:请从您的问题中删除“谢谢,丹”。一个问题不仅仅与一个人有关,而是与社区有关。 @idiqual:Dan
是 OP 的名称。他没有感谢Dan
。
Please Don't Use Signatures
了解更多关于this
:developer.mozilla.org/en/JavaScript/Reference/Operators/this
【参考方案1】:
Shape 是一个 JavaScript 类。它有成员 toString() 和私有属性 this.x
this 指的是当前类实例。
为了让 toString() 意识到它是在“当前类实例”下运行的,您将其赋值为 = this。因为变量 'that' 可以在 toString() 的范围内访问。这就是所谓的“我”运算符。
【讨论】:
嗯。严格来说,JS 中没有类。Shape
是一个构造函数。而且私有属性也不存在,所有属性都可以被任何引用该对象的代码公开访问。【参考方案2】:
this
的值是在调用函数时设置的。
将that
设置为this
会为该函数内部定义的函数保留该值(因为否则它将获得this
的值,这取决于it(内部函数) 被调用。
【讨论】:
【参考方案3】:它使内部函数可以访问调用了 Shape() 方法的实例。这种类型的变量访问称为“闭包”。更多详情请看这里:https://developer.mozilla.org/en/JavaScript/Guide/Closures
【讨论】:
【参考方案4】:构造函数中的this
指的是将从它构建的对象。但是,它的方法中的this
可能不再引用同一个对象。
因此,我们通过将this
保留到变量that
中来解决这个问题。这样,我们仍然可以在不使用this
变量的情况下引用创建的对象。
function Shape(x, y)
var that= this;
this.toString= function()
//"this" in here is not the same as "this" out there
//therefore to use the "this" out there, we preserve it in a variable
;
【讨论】:
以上是关于var that = this - 你能帮我理解吗[重复]的主要内容,如果未能解决你的问题,请参考以下文章
你能帮我理解这个吗? “常见的 REST 错误:会话无关紧要”