这个和那个有啥区别[重复]
Posted
技术标签:
【中文标题】这个和那个有啥区别[重复]【英文标题】:What difference between This and That [duplicate]这个和那个有什么区别[重复] 【发布时间】:2014-05-28 23:53:54 【问题描述】:我想知道和理解 this 和 that 之间的区别,以及何时必须使用它。 我准备了很多帖子和很多教程,但我还不明白
这是我的课
function Container(param)
function dec()
if (secret > 0)
secret -= 1;
return true;
else
return false;
this.member = param;
var secret = 3;
var that = this;
this.service = function ()
console.log(this.member); // foo
console.log(that.member); // foo
return dec() ? that.member : null;
;
新的
var myContainer = new Container('foo');
myContainer.service()
调用myContainer.service()
将在前三次调用时返回“abc”。
之后,它将返回 null
为什么我必须这样做var that = this
??
【问题讨论】:
还有***.com/questions/3127429/javascript-this-keyword 你试过没有that
看看会发生什么?可能是了解正在发生的事情的好方法。
在您的示例中,我看不到 that
的需要。试试var s = myContainer.service; s()
,看看有/没有that
会发生什么。
@CoderDennis 是的,它可以工作
类似问题 - self=this 和 difference between self and this
【参考方案1】:
this
是一个变量,用于获取当前函数的上下文(取决于它的调用方式)。
that
没有特殊含义。它只是一个被赋值的变量。
在这种特殊情况下,that
被分配了 this
在 Container
运行时所具有的值,并在 service
函数中使用(但仍然具有作为调用上下文的值到Container
。由于service
是一个不同的函数,它的this
的值可能不同。
通常,对于这种特殊的函数设计,Container
将作为构造函数调用(所以this
将是Container
的实例对象)然后service
将在该实例对象的上下文中调用,因此您可以使用this
而不是通过that
传递值。我不知道为什么该代码的作者在这里选择使用that
。
【讨论】:
但为什么我必须做 var that = this; ? javascript.crockford.com/private.html @monkeyUser:你不必必须。如果你不想要 - 你可以不定义that
变量。
@monkeyUser — 否则 that
根本没有值。
你有明确的例子吗?以上是关于这个和那个有啥区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章
CoffeeScript,=> 和 -> 有啥区别 [重复]