我很好奇其他人如何使用this关键字.我倾向于在构造函数中使用它,但我也可以在其他方法中使用它.一些例子:
在构造函数中:
public Light(Vector v)
{
this.dir = new Vector(v);
}
Run Code Online (Sandbox Code Playgroud)
别处
public void SomeMethod()
{
Vector vec = new Vector();
double d = (vec * vec) - (this.radius * this.radius);
}
Run Code Online (Sandbox Code Playgroud) 我知道这this
是指当前的对象.但我不知道什么时候才能真正使用它.例如,如果我使用x
而不是this.x
在某些方法中,会有什么区别吗?可能x
会引用一个考虑方法的局部变量?我的意思是仅在此方法中看到的变量.
怎么样this.method()
?我可以用吗?我应该用它吗?如果我只是使用method()
,默认情况下它不会应用于当前对象吗?
如何将上下文传递给setTimeout
?我想打电话this.tip.destroy()
,如果this.options.destroyOnHide
在1000毫秒.我怎样才能做到这一点?
if (this.options.destroyOnHide) {
setTimeout(function() { this.tip.destroy() }, 1000);
}
Run Code Online (Sandbox Code Playgroud)
当我尝试以上时,this
指的是窗口.
我有这样的事情:
<div class="content">
<a href="#">A</a>
</div>
<div class="content">
<a href="#">B</a>
</div>
<div class="content">
<a href="#">C</a>
</div>
Run Code Online (Sandbox Code Playgroud)
单击其中一个链接时,我想在未单击的链接上执行.hide()函数.我理解jQuery有:not selector,但在这种情况下我无法弄清楚如何使用它因为我必须使用它来选择链接$(".content a")
我想做点什么
$(".content a").click(function()
{
$(".content a:not(this)").hide("slow");
});
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,我无法弄清楚如何正确使用:not selector.
我认为这将是我可以轻松谷歌的东西,但也许我不是在问正确的问题......
如何在给定的javascript函数中设置"this"指的是什么?
例如,像大多数jQuery的功能一样,例如:
$(selector).each(function() {
//$(this) gives me access to whatever selector we're on
});
Run Code Online (Sandbox Code Playgroud)
如何在调用时编写/调用我自己的独立函数,这些函数具有适当的"this"引用?我使用jQuery,所以如果有一个特定于jQuery的方法,那就是理想的.
我正在阅读这个问题的答案C++的优点和缺点,并在阅读评论时得到了这个疑问.
程序员经常发现令人困惑的是"this"是指针而不是引用.另一个困惑是为什么"hello"不是std :: string类型但是求值为char const*(指针)(在数组到指针转换之后) - Johannes Schaub - litb于2008年12月22日在1:56
这只表明它没有使用与其他(后来的)语言相同的约定. - le dorfier 2008年12月22日3:35
我称之为"这个"的事情虽然是一个非常微不足道的问题.还有哎呀,感谢我在未定义行为的示例中捕获了一些错误.:)虽然我不明白大小的信息与第一个中的任何东西有关.根本不允许指针指向已分配的内存 - jalf 08年12月22日4:18
这是一个不变的人吗? - yesraaj 08年12月22日6:35
如果方法是const int getFoo()const,这可以是常量; < - 在getFoo的范围内,"this"是常量,因此是readonly.这可以防止错误并为调用者提供某种程度的保证,即对象不会更改. - 道格T. 2008年12月22日16:42
你不能重新分配"这个".即你不能做"this =&other;",因为这是一个右值.但这是T*类型,而不是T const类型.即它是一个非常量指针.如果你在const方法中,那么它是一个指向const的指针.T const.但是指针本身是无关紧要的 - 约翰内斯·绍布 - 在2008年12月22日17:53
想到这个"this":#define this(this_ + 0),编译器将"this_"创建为指向对象的指针,并使"this"成为关键字.你不能指定"this"因为(this_ + 0)是一个右值.当然那不是它的原因(没有这样的宏),但它可以帮助理解它 - Johannes Schaub - litb 2008年12月22日17:55
我的问题是,为什么this
指针不是引用?使它成为指针的任何特殊原因?
为什么this
作为参考的一些进一步的论点是有道理的:
Item 1
来自More Effective C++
:当保证我们有一个有效的对象,即不是NULL(我的解释)时,使用引用..
)的语法比访问指针(->
或(*)
)更好,更短.我是下划线的新手.js.是什么目的[context]
的_.each()
?该如何使用?
我是jQuery的新手,正在制作选项卡式面板,遵循JavaScript和jQuery教程:The Missing Manual,当作者这样做时,第一行是:
var target = $(this);
Run Code Online (Sandbox Code Playgroud)
但我试着这样做
var target = evt.target;
Run Code Online (Sandbox Code Playgroud)
我得到了那个错误:
Uncaught TypeError: Object http://localhost/tabbedPanels/#panel1 has no method 'attr'
Run Code Online (Sandbox Code Playgroud)
当我改evt.target
回去时$(this)
,它就像一个魅力.
我想知道$(this)
和之间的区别是evt.target
什么?
这是我的代码,以防您需要它:
index.html:
<!DOCTYPE html>
<html>
<head>
<title>Tabbed Panel</title>
<style>
body {
width : 100%;
height: 100%;
}
#wrapper {
margin : auto;
width : 800px;
}
#tabsContainer {
overflow: hidden;
}
#tabs {
padding:0;
margin:0;
}
#tabs li {
float : left;
list-style:none;
}
#tabs …
Run Code Online (Sandbox Code Playgroud) 给出以下代码:
public interface Selectable {
public void select();
}
public class Container implements Selectable {
public void select() {
...
}
public void createAnonymousClass() {
Selectable s = new Selectable() {
public void select() {
//see comment below.
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
我想Container.select()
从我的匿名类' select()
方法中访问.但是,this.select()
会再次调用匿名类的select()
方法.
我的建议是:
在Container中引入一个字段,例如
private Container self = this;
Run Code Online (Sandbox Code Playgroud)
现在我可以Container.select()
通过self.select()
在匿名类中调用来访问.
这是一种合理的方式吗?还是有更好的方法吗?
我对Javascript有很好的理解,除了我找不到设置"this"变量的好方法.考虑:
var myFunction = function(){
alert(this.foo_variable);
}
var someObj = document.body; //using body as example object
someObj.foo_variable = "hi"; //set foo_variable so it alerts
var old_fn = someObj.fn; //store old value
someObj.fn = myFunction; //bind to someObj so "this" keyword works
someObj.fn();
someObj.fn = old_fn; //restore old value
Run Code Online (Sandbox Code Playgroud)
没有最后4行,有没有办法做到这一点?这很烦人......我试过绑定一个匿名函数,我觉得这个函数漂亮而聪明,但无济于事:
var myFunction = function(){
alert(this.foo_variable);
}
var someObj = document.body; //using body as example object
someObj.foo_variable = "hi"; //set foo_variable so it alerts
someObj.(function(){ fn(); })(); //fail.
Run Code Online (Sandbox Code Playgroud)
显然,将变量传递给myFunction是一个选项......但这不是这个问题的重点.
谢谢.
this ×10
javascript ×4
jquery ×3
java ×2
scope ×2
c# ×1
c++ ×1
c++-faq ×1
callback ×1
coding-style ×1
oop ×1
pointers ×1
reference ×1
settimeout ×1
variables ×1