2015-11-30 113 views
-1

在javascript中,所有函数都是对象。那么如何当我使用'this'这样的:javascript中的'this'的范围不一致

var myObj = function() { 
    doSomething: function() { 
     alert('msg'); 
    } 

    myFunc2: function() { 
     this.doSomething(); //'this' doesn't equal myFunc2, it's myObj 
    } 
} 

'this'是指myObj而不是myFunc2? Javascript有函数范围,'this'在myFunc2中使用,所以它应该引用myFunc2。

为什么不是这样?这种语言有时看起来非常不一致。

+2

https://github.com/getify/You-Dont -Know-JS/blob/master/this%20&%20object%20prototypes/README.md – Michelangelo

+0

您的代码没有多大意义。你有一个带有两个嵌套函数的函数,但是没有任何函数调用它们。 – Pointy

+0

这甚至不是有效的JavaScript?你的意思是说我的Obj是一个对象而不是一个函数? –

回答

0

JavaScript没有“功能范围”,您正在试验this如何在JavaScript中工作。

this关键字始终引用调用函数的对象,在本例中为myObj

检查从本章你不知道JS丛书,详细了解如何this作品在JavaScript:

You Don't Know JS: this & Object Prototypes

+5

当然JavaScript有函数范围。 –

+0

JavaScript中的“函数范围”仅影响提升,而不是“this”。 –

+0

当然,函数作用域与'this'没有多大关系,但这并不意味着JavaScript没有函数作用域。 –