这是代码
obj = {
a: 'some value';
m: function(){
alert(this.a);
}
}
obj.m();
结果为'some value'
。
我听说此关键字引用的函数所有者为obj
。
现在的问题是上面代码中函数的所有者是obj
,那么为什么在函数拥有上述代码的所有者时使用此关键字很重要
以下列方式工作
obj = {
a: 'some value';
m: function(){
alert(a);
}
}
obj.m();
哪个不起作用我知道但为什么?
答案 0 :(得分:6)
a
在函数m
范围内不可用。
a
是对象obj
的属性,仅在obj.a
的上下文中可用作this.a
或obj
。
由于obj.m()
在m
的上下文中执行a
,您可以使用函数a
内的this.a
访问m
。
在JavaScript中,必须使用this
。
在Java或C ++等其他语言中,this
的使用是可选的。如果Java / C ++中没有局部变量,x
会自动解析为this.x
。
答案 1 :(得分:0)
当你说哪个对象“拥有”一个函数时,我觉得你有点困惑。 “this”关键字就像一个变量,指向调用函数的任何对象。
例如,您可以编写如下函数:
function logThis(){console.log(this.a); }
现在,您可以创建两个不同的对象:
var objOne = { a:“我是存储在键a”,func:logThis}
的字符串var objTwo = { func:logThis }
请注意,两个对象都有一个名为“func”的键,该键存储“logThis”函数。这意味着objOne.func与objTwo.func相同;它们与logThis(){console.log(this.a)}
相同现在,如果你调用objOne.func(),它将记录“我是存储在键的字符串a”,调用func的对象是objOne,这是存储在objOne.a的字符串
相比之下,如果你调用objTwo.func(),你将得到'undefined'。这是因为objTwo是调用func的对象,而objTwo没有任何名为a的属性。