this
关键字的目的是什么?类中的方法是否可以访问同一个类中的其他对等成员?this
在类中调用一个调用peer方法的需要是什么?
我的工作,涉及到了很多接口和继承,它开始变得有点棘手的项目,现在我碰到的一个问题.
我有一个抽象类State,它接受一个Game对象作为构造函数参数.在我的Game类的构造函数中,它接受一个State.这个想法是,当从抽象基类Game类继承时,在调用基类的构造函数时,你给它一个初始的State对象.但是,此State对象与您正在创建它的游戏相同.代码如下所示:
public class PushGame : ManiaGame
{
public PushGame() :
base(GamePlatform.Windows, new PlayState(this), 60)
{
}
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我只能假设因为'this'关键字在构造函数开始执行之后才可用.试图在基类的构造函数中使用它显然不起作用.那么对我来说最好的解决方法是什么呢?我的计划B是从Game类的构造函数中删除State参数,然后在构造函数代码中设置状态.
这样做有一种更简单,更少侵入性的方式吗?
请考虑以下代码:
function A() {}
A.prototype.go = function() {
console.log(this); //A { go=function()}
var f = function() {
console.log(this); //Window
};
f();
}
var a = new A();
a.go();
Run Code Online (Sandbox Code Playgroud)
为什么函数'f'中的'this'指的是全局范围?为什么它不是功能'A'的范围?
我找到了一些关于打开/关闭递归的解释,但我不明白为什么定义包含"递归"这个词,或者它与动态/静态调度的比较.在我发现的解释中,有:
打开递归.大多数语言使用对象和类提供的另一个便利功能是一个方法体通过一个名为
self
或在某些语言中调用的特殊变量来调用同一对象的另一个方法的能力this
.self的特殊行为是它是后期绑定的,允许在一个类中定义的方法在第一个类的某个子类中调用稍后定义的另一个方法.[ Ralf Hinze ]
......或者在维基百科:
调度语义
this
,即对此调用的方法调用是动态调度的,称为开放递归,意味着这些方法可以被派生类或对象覆盖.相比之下,函数的直接命名递归或匿名递归使用闭合递归,具有早期绑定.
我还阅读了StackOverflow问题:什么是开放递归?
但我不明白为什么"递归"这个词用于定义.当然,如果通过执行方法递归调用来使用"开放递归",它可能会导致有趣(或危险)的副作用.但是定义不直接考虑方法/函数递归调用(在维基百科定义中显示"封闭递归",但听起来很奇怪,因为"打开递归"并不是指递归调用).
你知道为什么定义中有"递归"这个词吗?是因为它是基于另一个我不知道的计算机科学定义吗?应该简单地说"动态调度"还不够吗?
这是我的javascript对象,我想知道如何避免在原型中多次使用"this".我知道有许多理论和原型关系的联系,这可能已经得到了解答,但由于我无法满足所有目的,我认为这可能值得另一个问题.
function shape(smth) {
this.a = smth
this.b = 2
this.c = 3
}
shape.prototype.doCalculus = function () {
return this.a * this.b + this.c - (2 * (this.b + this.c) + this.a);
}
module.exports = shape
Run Code Online (Sandbox Code Playgroud) 我有这个简单的界面:
public interface Node<E extends Node<E>>
{
public E getParent();
public List<E> getChildren();
default List<E> listNodes()
{
List<E> result = new ArrayList<>();
// ------> is this always safe? <-----
@SuppressWarnings("unchecked")
E root = (E) this;
Queue<E> queue = new ArrayDeque<>();
queue.add(root);
while(!queue.isEmpty())
{
E node = queue.remove();
result.add(node);
queue.addAll(node.getChildren());
}
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
我看到它this
总是Node<E>
(根据定义)的一个实例.
但是我无法想象一个this
不是实例的情况E
......
因为E extends Node<E>
,不应该也不Node<E>
等同于E
定义?
你能给出一个实例的对象的例子Node<E>
,但它不是一个实例E
吗?
与此同时,我的大脑正在融化......
上一课是一个简化的例子. …
我读到这this
是一个右值,我们无法通过应用来获取其地址&this
。
在我的代码中,我尝试使用的引用绑定this
。我想知道哪种地址可以给this
?还是都错了?
到底是this
什么?左值,右值,关键字还是其他?
void MyString::test_this() const{
std::cout << "this: " << this << std::endl;
const MyString * const& this_ref = this;
std::cout << "thie_ref: " << &this_ref << std::endl;
const MyString * const&& this_right = this;
std::cout << "thie_right: " << &this_right << std::endl;
}
//this: 00CFFC14
//thie_ref: 00CFFB14
//thie_right: 00CFFAFC
Run Code Online (Sandbox Code Playgroud) 在Java中,您只需return this
获取当前对象即可.你是如何用C++做到的?
Java的:
class MyClass {
MyClass example() {
return this;
}
}
Run Code Online (Sandbox Code Playgroud) 我是C++的新手,我不明白this
指针在以下场景中的作用:
void do_something_to_a_foo(Foo *foo_instance);
void Foo::DoSomething()
{
do_something_to_a_foo(this);
}
Run Code Online (Sandbox Code Playgroud)
我从别人的帖子里抓住了这个帖子.
有什么this
意义?我糊涂了.该函数没有输入,那么在this
做什么?
this ×10
c++ ×5
javascript ×2
pointers ×2
base ×1
c# ×1
class ×1
constructor ×1
definition ×1
generics ×1
inheritance ×1
java ×1
oop ×1
reference ×1
return ×1
rvalue ×1
scope ×1