我明白了什么this,但*this和之间的区别是this什么?
是的,我已经用Google搜索并*this在我的教科书中阅读,但我只是不明白......
我有一个功能如下:
doSomething: function () {
var parent = null;
if (this === null) {
parent = 'some default value';
} else {
parent = this.SomeValue();
}
}
Run Code Online (Sandbox Code Playgroud)
父母可以设置为'某个默认值'还是检查null是多余的?
或者,如果我使用限制较少的情况怎么办:
doSomething: function () {
var parent = this ? this.SomeValue() : 'some default value';
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下父母可以设置为"某个默认值"吗?
为什么IDE会抱怨"在构造函数中泄漏这个"?我一直认为这只是不好的做法.但我实际上从来没有发现为什么它是坏的.
我记得,当我想console.log作为一个回调参数传递给某个函数时,除非我使用该bind()方法绑定console它,否则它不起作用.
例如:
const callWithTest = callback => callback('test');
callWithTest(console.log); // That didn't use to work.
callWithTest(console.log.bind(console)); // That worked (and works) fine.
Run Code Online (Sandbox Code Playgroud)
请参阅未捕获的TypeError:javascript中的非法调用.
但是,最近我发现console.log()即使调用除控制台以外的对象,它也能正常工作.例如:
console.log.call(null, 'test');
Run Code Online (Sandbox Code Playgroud)
日志'test'.
它何时以及为何会改变?规范是否说明了什么?
this经常参考当前的背景.但是,在某些情况下,为什么我们必须使用getBaseContext()而不是this.(这意味着使用时this会发现错误).
这是我的例子:
Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?>arg0, View arg1, int arg2, long arg3){
Toast.makeText(getBaseContext(),"SELECTED", Toast.LENGTH_SHORT).show(); //this line
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,当我更改getBaseContext()为this将收到错误.
请问谁可以帮我解释一下.
为了使这个代码与C++ 11引用限定符按预期工作,我必须引入一个std::move(*this)听起来不对的代码.
#include<iostream>
struct A{
void gun() const&{std::cout << "gun const&" << std::endl;}
void gun() &&{std::cout << "gun&&" << std::endl;}
void fun() const&{gun();}
void fun() &&{std::move(*this).gun();} // <-- is this correct? or is there a better option
};
int main(){
A a; a.fun(); // prints gun const&
A().fun(); // prints gun&&
}
Run Code Online (Sandbox Code Playgroud)
有些事情听起来不对劲.有std::move必要吗?这是推荐使用吗?目前,如果我不使用它,我会遇到gun const&两种情况,这不是预期的结果.
(似乎*this总是隐式和左值引用,这是有道理的,但然后是逃避使用的唯一方法move)
用clang 3.4和测试gcc 4.8.3.
编辑:这是我从@hvd回答中理解的:
1)std::move(*this)在语法和概念上是正确的
2)但是,如果 …
在以下对象中,我使用'this'引用时遇到问题:
function SampleObject(){
this.addObject = function(object){...}
...
// more code here
...
this.addNewObjects= function(arr){
arr.forEach( function (obj) {
this.addObject(new Obj(obj.prop1, obj.prop2));
});
}
}
Run Code Online (Sandbox Code Playgroud)
我假设上下文正在改变,'this'指的是迭代的'obj',而不是'SampleObject'.我已经使用正常的for循环解决了这个问题,但是,我知道为什么这不起作用,并且想知道是否有另一种方法可以做到这一点.
我正在尝试使用jQueryUI创建一个通用的自动完成脚本.自动完成应适用于每一个:
<input type='text' class='autocomplete' id='foo'/>
<input type='text' class='autocomplete' id='bar'/>
...
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试使用$(this)访问源函数中的'foo'或'bar',但是在发出警报时我总是得到'undefined'.
$('input.autocomplete').autocomplete({
source: function(req, add){
var id = $(this).attr('id');
alert(id);
}
});
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
在我写的一个小游戏中,我有一个Weapon带有两个构造函数的类,一个用于获取一些参数来生成一个自定义武器,另一个用于获取一个默认武器CHAIN_GUN:
Weapon::Weapon (void) {
// Standard weapon
*this = getWeapon(CHAIN_GUN);
return;
}
Run Code Online (Sandbox Code Playgroud)
问题:使用*this和operator=初始化课程是否会产生任何负面影响?
我可以从类构造函数中将"this"作为指针传递给函数,并在构造函数返回之前使用它指向对象的成员吗?
这样做是否安全,只要在函数调用之前正确初始化被访问的成员?
举个例子:
#include <iostream>
class Stuff
{
public:
static void print_number(void *param)
{
std::cout << reinterpret_cast<Stuff*>(param)->number;
}
int number;
Stuff(int number_)
: number(number_)
{
print_number(this);
}
};
void main() {
Stuff stuff(12345);
}Run Code Online (Sandbox Code Playgroud)
我认为这不起作用,但似乎.这种标准行为,还是仅仅是未定义的行为?
this ×10
c++ ×4
javascript ×3
android ×1
autocomplete ×1
c++11 ×1
console.log ×1
constructor ×1
java ×1
jquery ×1
jquery-ui ×1
lvalue ×1
null ×1