2015-11-30 68 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沒有函數作用域。 –