问题标签 [this-pointer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
380 浏览

c++ - 使用 *this 是个好主意吗?

我不确定是否

是我们可以返回调用成员函数的类的实例的唯一方法吗?我问的原因是因为我们的教练告诉我们在必要时避免使用指针,我想知道这是不是唯一必要的方法是返回 this 指针。

我正在使用一个包含私有数据成员分子和分母的分数类。我正在谈论的成员函数用于添加两个分数,例如:

plus 成员函数定义如下:

教练希望我们做 C = A += B ,所以我想这就是原因。

0 投票
7 回答
1753 浏览

c++ - 在 g++ 中删除此指针行为

在查看程序的输出之后,似乎仍然调用了“dev”函数,尽管在调用 dev 之前在函数 abc 中调用了“delete this”?gcc/g++ 如何处理这个问题?

0 投票
2 回答
614 浏览

c++ - 在初始化列表中使用超类的地址/指针

上下文 1:D 类:公共 B1,公共 B2{};

上下文 2:B2 带 B1 初始化: B2( B1 * ) //B2 的构造函数

我的问题在 D 的初始化列表中:

D::D() : B1(), B2( ? )... 应该是什么?

我不想在 ? 地方,因为在初始化列表中使用“this”是不好的。并且由于 B1 部分已经初始化,使用它是有意义的。

我应该怎么办 ?

0 投票
4 回答
6795 浏览

c# - 使用带有 this 关键字的 ref 参数?

有没有办法强制 this 关键字充当 ref 参数?我想传入一个修改对象多个属性的访问者,但这只是想像一个值参数一样。

对象中的代码:

访客中的代码:

0 投票
1 回答
1187 浏览

javascript - 创建对象时交叉引用 js-object 变量

概括:

我想知道是否可以做这样的事情:

...通过使用其他指针,例如{a: 'A',b: self.a}or{a: 'A',b: own.a}或其他任何东西...

完整问题:

我正在尝试使用 Ext.extend 扩展 MyBaseModule,并且需要交叉引用传递给 Ext.extend() 的扩展对象中的值。

由于我还没有在 MyModule 的上下文中,我无法使用来引用对象(参见下面第 12 行的示例)。有没有其他方法可以在不首先创建对象的情况下引用这样的值?

或者以下是唯一的解决方案?如果可能的话,我想避免这种情况,因为我发现它对于大型扩展定义的可读性较差。

0 投票
2 回答
1582 浏览

c# - 在 C# 中使用表单控件时何时使用 THIS 关键字

我距离掌握 C# 还很远,但我内心的孩子正在推动我每天继续改进我的编程。
当我制作一个 WinForms 应用程序时,我想切实地更改和使用许多控件。
我不明白什么时候需要使用this.control关键字,什么时候应该使用 just control
示例:
如果我想更改标签的文本,我可以写

或者

其中哪一个是正确的方法?this在WinForms中使用控件(如datagrid、text、tables等)时,何时使用关键字有简单的解释吗?

0 投票
4 回答
2414 浏览

vb.net - 为什么在 VB.NET 中传递“Me”ByRef 是合法的?

刚才我震惊地发现以下是合法的(C#等价物绝对不是):

但对我来说奇怪的是,它似乎并没有达到的预期:

上面的输出是“10”,而不是我想象的“0”(当然,这种期望本身就充满了某种恐怖)。所以看起来你可以通过Me ByRef,但是编译器会以某种方式覆盖(?)行为,就好像你已经通过了Me ByVal

  1. 为什么通过是合法的Me ByRef(是否有一些向后兼容的解释?)
  2. 我是否正确地说这样做的行为被编译器覆盖了?如果没有,我错过了什么?
0 投票
8 回答
1734 浏览

c++ - 为什么这个指针地址在析构函数(c++)中不是预期的

我对基类析构函数中的 this 指针有一个奇怪的问题。

问题描述:

我有 3 个课程:A1A2A3

A2从A1公开继承,从A3私下继承

A3有一个函数getPrimaryInstance() ...返回A1对A2实例的类型引用:

A3构造函数如下所示:

(其中regInst(...)A1中定义的函数,用于存储指向所有A3实例的指针)

同样的A3析构函数:

^这里是问题发生的地方!

当名为primary的静态A2实例在程序终止时被销毁时,将调用A3析构函数,但在~A3内部,我尝试访问与我正在销毁的实例相同的函数。 =>运行时访问冲突!

所以我认为可以用一个简单的 if 语句来修复,如下所示:

(双重演员的原因是继承:)
A1 A3
。\ /
. A2
(但这并不重要,可能只是(int) -casted 或其他)

更重要的是它仍然崩溃。使用调试器单步执行代码会发现,当我的A2 实例被破坏时,析构函数中的this指针和我通过调用getPrimaryInstance()获得的地址由于某种原因根本不匹配!我不明白为什么this指针指向的地址总是不同于它(据我所知)应该是的地址。:(

在析构函数中这样做:

还向我展示了差异不是恒定的(我曾短暂地认为存在一些恒定偏移),所以当它应该是同一个时,它就像是两个完全不同的对象。:(

我正在使用 VC++ Express (2008) 进行编码。在谷歌搜索了一下之后,我发现了以下 MS 文章:
修复:“this”指针在基类的析构函数中不正确

这与我遇到的问题不同(据说它在 C++.Net 2003 中也已修复)。但不管这些症状看起来很相似,而且它们确实提供了一个简单的解决方法,所以我决定尝试一下:
删除了 not-working- if -statement 并在A2的第二个继承之前添加了virtual,如下所示:

它奏效了!this指针看起来仍然是错误的,但不再给出访问冲突。

所以我最大的问题是为什么?
为什么this指针不指向它应该指向的位置(?)?
为什么像上面那样向继承添加virtual可以解决它(尽管它仍然指向&getPrimaryInstance()以外的其他地方)?
这是一个错误吗?有人可以在非 MS 环境中尝试吗?
最重要的是:这安全吗?当然它不再抱怨了,但我仍然担心它没有做它应该做的事情。:S

如果有人对此有知识或经验并且可以帮助我理解它,我将非常感激,因为我仍在学习 C++,这完全超出了我目前的知识范围。

0 投票
4 回答
4269 浏览

c++ - 你能解释一下this指针的概念吗?

我需要了解this指针的概念,最好举个例子。

我是 C++ 新手,所以请使用简单的语言,以便我更好地理解它。

0 投票
7 回答
2290 浏览

c++ - 可以使用 this 指针吗?

可能的重复:
有什么理由使用这个->
什么时候应该使用这个->?
我什么时候应该明确使用this指针?

在使用指向类的指针时,我喜欢this->在类中的变量前面添加一个,以更清楚地表明我正在谈论的变量是在当前类中,而不是临时变量等。所以我的行将是就像是

代替

添加多余的 是否可以this,或者会降低代码的可读性?