可能重复:
使用"删除此项"删除当前对象是否可以?
我刚刚看到他们delete this;
在类函数中完成的一些代码,我知道这不是一个好的设计,但它定义了会发生什么,让我们说这个类总是来自某个地方的指针.是否会以正确的方式删除它?
class A
{
public:
void abort() { delete this; }
};
class B
{
void func() { A* a = new A; a->abort(); }
};
Run Code Online (Sandbox Code Playgroud) 在我的一个类(ClassA)中,我想创建另一个类(ClassB)的相关实例,为它提供对启动它创建的对象的引用.所以我为ClassB提供了一个带有(ref ClassB master)参数的construcror.但是在ClassA中,我不能只调用var slave = new ClassB(ref this).怎么实现这个?
我们已经知道,当我们在Java中调用方法时,参数和局部变量将存储在堆栈中.
例如,以下代码:
public class Test
{
int x = 10;
int y = 20;
void test(int y)
{
int z = y;
this.x = y; // How JVM knows where is our current object?
}
public static void main(String [] args)
{
Test obj = new Test();
obj.test(3);
}
}
Run Code Online (Sandbox Code Playgroud)
当我们调用时,会产生如下所示的调用堆栈obj.test()
:
| |
+-------------+
| z |
| y | obj.test()
+-------------+
| obj | main()
+-------------+
Run Code Online (Sandbox Code Playgroud)
但我想知道存储this
在哪里引用method
?它是否也存储在堆栈中,如下所示:
| |
+-------------+
| this | …
Run Code Online (Sandbox Code Playgroud) 我有一个发行人,我在这个'对象'中失去了'this'.以下javascript的输出给了我"some-id"然后"undefined".当我在回调函数中使用'this'时,范围会超出对象,并且不再使用'this'.如何让回调使用'this'或者至少可以访问该对象?
由于我将创建多个对象,因此我无法创建像存储一样的"静态".请帮助这个javascript n00b ;-)
这是我的测试代码,您可以用它来重现我的问题.我想要的是CheckBox.doSomething()
返回该测试用例this.id
应匹配的值some-id
.
function CheckBox(input_id) {
this.id = input_id;
this.doSomething();
$('#some-element').click(this.doSomething);
}
Checkbox.prototype.doSomething = function() {
alert(this.input_id);
}
var some_box = new CheckBox('some-id');
some_box.doSomething();
$('#some-element').click();
Run Code Online (Sandbox Code Playgroud)
编辑:我甚至无法让它按照我的要求工作:
function CheckBox2(input_id) {
this.id = input_id;
alert(this.id);
}
CheckBox2.prototype.doSomething = function() {
alert(this.input_id);
}
var some_box = new CheckBox2('some-id');
some_box.doSomething();
Run Code Online (Sandbox Code Playgroud) 我的代码库中有这一行:
var uncurryThis = Function.bind.bind(Function.call);
Run Code Online (Sandbox Code Playgroud)
我正在努力解决这个问题.据推测,它是不可靠的.我该如何解决这个问题?
我想这是一个版本Function.bind
,其自身this
必然Function.call
.对我没有帮助.而且我没有找到任何用途,所以我甚至不确定你是单独称它还是需要"作为一种方法"来调用它,只是,你知道,首先绑定它.
我使用胖箭头函数有以下ES6代码:
var test = {
firstname: 'David',
fn: function() {
return ['one', 'two', 'tree'].map(() => this.firstname)
}
}
console.log(test.fn())
Run Code Online (Sandbox Code Playgroud)
根据箭头函数应该如何工作,我希望this
成为test
对象.ES6Fiddle,Traceur和Firefox产生了预期的输出["David", "David", "David"]
.
chrome://flags/#enable-javascript-harmony
但是,在Chrome中启用这些功能时,我会得到[undefined, undefined, undefined]
.如果console.log(this)
它显示它是窗口对象,则在严格模式下出现错误.this
ES6箭头功能的词汇是否未在V8中实现?
我正在开发一个项目,以前的开发人员添加了许多this.x
代码,在我看来,这些代码使代码更长,因此可读性更低.它通过一些Eclipse保存操作放在整个项目中.
我正在寻找的是IntelliJ重构方法,我可以重构整个项目的所有自引用,以便:
this.something = "foo";
Run Code Online (Sandbox Code Playgroud)
成为这个:
something = "foo";
Run Code Online (Sandbox Code Playgroud)
有这样的东西(我正在使用Android Studio 1.2),还是我必须运行正则表达式替换并确保没有任何破坏?
我很好奇是否有一种方法this
可以在C#中的虚方法中为null.我认为这是不可能的.我在现有代码中看到,在代码审查期间,我希望100%肯定对其删除进行评论,但我想要一些确认和社区的更多上下文.this != null
在任何非静态/实例方法中都是这种情况吗?否则它会是一个空指针异常对吗?我正在考虑扩展方法以及我可能不熟悉多年Java的C#特性.
我知道类型this
是prvalue("纯"rvalue)指针,并且它可以通过附加关键字成为指向const的指针和/或指向volatile的指针(影响对其实例变量的访问)const
或者volatile
它所属的函数定义的末尾.
我也知道this
有时(错误地)将其描述为一个const指针,也许是为了说"你不能做出任务this
".作为右值,它本质上是不可分配的,因此不需要const
rvalue 的概念.
我也知道在C++ 11中,有些情况下rvalue或左值会影响调用解析,但我试图解决这些可能性,而且我不确定是否存在实际情况调用分辨率this
是一个右值指针而不是一个const
左值指针.
从程序员的角度来看,是否存在这种区别产生真正差异的情况,例如可以使用const
左值指针而不能使用左值指针的上下文,其中可以使用左值指针不能使用const
左值指针,或者差异会影响呼叫解决?
我正在构建一个Angular 2应用程序(2.0),我有一个使用该ReactiveForms
模块的表单.因此,我在输入字段上使用验证器函数,包括自定义验证器.这很好用.
我的问题是我也在尝试在表单字段上使用自定义AsyncValidator.它似乎很直接,但我永远不能在AsyncValidator方法中引用类中的属性.
该FormGroup
和FormControl
的形式本身和输入字段属性看起来像这样在组件的类:
form: FormGroup;
userName = new FormControl("", [Validators.required], [this.userNameAsyncValidator]);
Run Code Online (Sandbox Code Playgroud)
还有一个FormBuilder
在ngOnInit()
,重视形式的功能form
属性.
constructor(private fb: FormBuilder, // this.fb comes from here
private css: ClientSecurityService) { // this.css comes from here
}
ngOnInit() {
this.form = this.fb.group({
"userName": this.userName
}
);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是在AsyncValidator中,我无法引用我在组件类中定义的任何服务 - 包括this.css
.这是验证器:
userNameAsyncValidator(control: FormControl): {[key: string]: any} {
return new Promise(resolve => {
this.css.getUrl()
.subscribe(
data => {
console.log('Returned http data:', data);
resolve(null);
}, …
Run Code Online (Sandbox Code Playgroud)