2015-09-01 102 views
1

如果我有這樣的函數表達式可以轉換爲Lambda表達式

module MyModule{ 
    export var myfunc = function() { 
    } 
} 

片斷,然後ReSharper的建議轉化爲

module MyModule{ 
    export var myfunc =() => { 
    } 
} 

但是這不工作時,該功能使用this

module MyModule{ 
    export var myfunc = function(){ 
     var x = $(this); 
    } 
} 

爲什麼轉換不起作用this正在使用中?

(如果你想知道爲什麼我一個模塊中使用this,這是因爲這種方法是事件處理程序)

+0

你的意思是resharper不建議只是因爲使用'this'而將函數轉換爲箭頭函數? – MinusFour

+0

@MinusFour我讀到的問題意味着當OP *做*轉換時,它不起作用,當函數期望'this'被綁定爲傳統函數。 (例如,當你將一個函數傳遞給'jQuery.each()'時,你期望的事情的方式)。 – Pointy

+0

@MinusFour我需要編輯我的答案。剛發現當函數位於模塊內時它不起作用。 – gsharp

回答

2

箭頭功能被隱式設置,使得this是不管它是在範圍中的箭頭函數被實例化。這是因爲如果你寫:

var myfunc =() => { ... } .bind(this); 

我覺得背後的概念是,它往往是這樣的回調確實想從外上下文訪問this值的情況。正如你所看到的,有時他們沒有。