Javascript';这';对对象名
好奇引发的一个问题,如果我有以下代码,那么通过Javascript';这';对对象名,javascript,object,this,Javascript,Object,This,好奇引发的一个问题,如果我有以下代码,那么通过this而不是show\u name方法中的user调用属性有什么好处(不仅仅是简单) var user = { name : 'John Doe', show_name : function(){ alert(this.name); // OR alert(user.name); } }; 通过使用此可以确保在将变量名称(例如从用户更改为某个东西后,您的代码仍然有效
this
而不是show\u name
方法中的user
调用属性有什么好处(不仅仅是简单)
var user = {
name : 'John Doe',
show_name : function(){
alert(this.name);
// OR
alert(user.name);
}
};
通过使用
此
可以确保在将变量名称(例如从用户
更改为某个东西
后,您的代码仍然有效
除此之外,我认为(在某些浏览器上)可能也会有一些性能提升,因为使用user.name
浏览器时,必须在功能之外的上下文中查找,而使用this.name
则坚持当前上下文
示例代码
var用户={
姓名:“约翰·多伊”,
show_name:function(){
警报(用户名);
}
};
var something=user;//将对象传递给另一个变量
user=null;//使用户变量指向其他变量
某物。显示_name();
如果运行上述代码,将在以下行中遇到错误:
alert(user.name);// 您可以在多个位置使用同一函数,并使其与上下文相关
function foo() {
alert(this.name);
}
var a = { alert: foo, name: "A" };
var b = { alert: foo, name: "B" };
a.alert();
b.alert();
如果要制作一个对象的多个副本,则需要此
,以便可以引用当前对象。使用该名称将引用默认对象,而不是您正在使用的副本。如果您查看此示例,差异将变得明显。它创建第二个对象并相应地设置原型
var user = {
name : 'John Doe',
show_name : function(){
alert(this.name);
// OR
alert(user.name);
}
};
user2 = Object.create( user );
user2.name = "someone else";
user2.show_name();
此处this.name
指的是当前对象的name
属性,而user.name
始终指的是原始name
属性。此处指定对象是当前名称空间的一部分,可以在对象内部访问。。假设您的对象名称从user
更改为newUser
,将不存在任何依赖关系并消除任何耦合问题。您是使用此
还是函数名称取决于函数的调用方式
函数的此
值由函数的调用方式或绑定设置,因此,如果函数始终作为合适对象的方法调用,请使用此
。但是,如果它可能以任何其他方式调用,或者此
应仅引用特定对象,请使用bind或对象名称
e、 g.给出OP示例,考虑:
var x = user.showName;
x();
在上面的例子中,调用showName时没有设置它的this
,因此它默认为全局对象,函数中的this.name
可能不是预期的
鉴于文本编辑器中具有相当强大的搜索和替换功能,更改函数名并不是一个特别繁重的问题
顺便提一下,这个问题经常被问到。没有“正确”的答案,只有在某些情况下如何做出选择的建议。在使用jQuery的情况下此
引用jQuery对象。因此,我的选择是根本不使用这个
var user = {
name : 'John Doe',
alertName : function(){
// alert(this.name); //never
alert(user.name);
}
};
showName : function(){
$('#show').click(function(){
//this here references jQuery object
$('#username').val(user.name);
});
};
此外,对象文字一般不应用于创建多个对象,因此,在对象文字中使用这个与使用对象变量名相比没有任何好处 哇,这是一个非常直截了当的答案。谢谢。引用“this”和“user”如何确保我们可以将“name”更改为“something”。你不是说我们可以把“user”改成“something”吗?@Jacob-很好-当然我是说写user
而不是name
。注意,使用这个:user.show_name.call(null)可能还有其他副作用代码>问题是使用this
而不是user
的好处是什么……它并不是在寻找相反的情况。@Quentin。你是对的。但是我发现这个问题仅仅是从这个角度来看的,成千上万的人也是如此。你发现了一个错误的问题。你要找的人是你现在不对。我已经阅读了这个问题的答案,并决定使用“this”的好处是微妙的,在我的特殊情况下,没有它我会更好。