2017-09-02 24 views
-1

我知道这个问题是相当愚蠢的。为什么在一个方法中的关键字

相关的代码:

var myObj = { 
    name: 'Popo', 
    lastName: 'Shomo', 
    fullName: function(){ 
     return name + " " + lastName; 
    } 
}; 

我知道加入this.namethis.lastName它会工作,但我的问题是:为什么不能去其词法范围,并从那里抢属性?我知道它完全是D-U-M-B,但我想知道背后的正确原因。

+1

如果你之前没有包含'name'属性并将其中一个设置为'myObj.name ='Popo',那么'name'是否仍然会引用该函数中的'this.name'?这是一个潜在的令人困惑的范围问题,它使得这个简单得多的解决方案(以及为什么[with'语句](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/with )已弃用)。 – Ryan

回答

0

这是因为你理论上可以在你的文件和对象属性中具有相同名称的变量。对象属性总是必须来自一个集合对象,否则每个面向对象的语言都会查找以前设置的变量。

相关问题