2

这是代码

obj = {
    a: 'some value';
    m: function(){
        alert(this.a);
    }
}

obj.m();

结果是'some value'

听说 this 关键字是指带有 is 的函数的所有者obj。现在的问题是,上面代码中函数的所有者是obj为什么当函数拥有所有者时使用这个关键字很重要上面的代码应该以下列方式工作

obj = {
    a: 'some value';
    m: function(){
        alert(a);
    }
}

obj.m();

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

4

2 回答 2

6

a不在功能范围内m

a是 object 的一个属性,obj仅在.obj.athis.aobj

由于在 的上下文中obj.m()执行,您可以使用内部函数访问。maathis.am

在 JavaScript 中,使用this是强制性的。

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

于 2013-02-17T16:59:20.017 回答
0

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

例如,您可以编写如下函数:

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

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

var objOne = { a: "我是存储在键 a 上的字符串", func: logThis }

var objTwo = { 函数:logThis }

请注意,这两个对象都有一个名为“func”的键,并且该键存储了“logThis”函数。这意味着 objOne.func 与 objTwo.func 相同;并且它们都与 logThis(){console.log(this.a)} 相同

现在,如果您调用 objOne.func(),它将记录“我是存储在键 a 处的字符串”调用 func 的对象是 objOne,这就是存储在 objOne.a 中的字符串

相比之下,如果您调用 objTwo.func(),您将得到“未定义”。那是因为 objTwo 是调用 func 的对象,而 objTwo 没有任何名为 a 的属性。

于 2018-02-06T19:59:08.183 回答