javascript函数和这个关键字,上下文

时间:2013-02-17 16:57:39

标签: javascript keyword

这是代码

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();

哪个不起作用我知道但为什么?

2 个答案:

答案 0 :(得分:6)

a在函数m范围内不可用。

a是对象obj的属性,仅在obj.a的上下文中可用作this.aobj

由于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的属性。