javascript函数和这个关键字context

javascript functions and this keyword, context

本文关键字:关键字 context 函数 javascript      更新时间:2023-09-26

这是代码

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

我知道这不起作用,但为什么?

a在函数m的作用域中不可用。

a是对象obj的属性,并且在obj的上下文中仅作为obj.athis.a可用。

由于obj.m()a的上下文中执行m,因此可以使用函数m中的this.a访问a

在JavaScript中,必须使用this

在Java或C++等其他语言中,this的使用是可选的。如果Java/C++中没有本地变量,但JavaScript中没有,x会自动解析为this.x

当你说哪个对象"拥有"一个函数时,我觉得你有点困惑。"this"关键字就像一个变量,指向调用函数的任何对象。

例如,您可以编写这样的函数:

函数logThis(){console.log(this.a);}

现在,您可以制作两个不同的对象:

var objOne={a: "我是一个存储在密钥a的字符串",func:logThis}

var objTwo={func:log此}

请注意,这两个对象都有一个名为"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的属性。