2013-06-03 55 views
0

我使用JQuery load函數來append(而不是替換)一些html數據到元素。我的問題是數據是加載函數上的this範圍。不能使用() =>。我如何訪問負載回調之外的變量?Typescript增益當前範圍或函數內變量

var element: JQuery; 

$("<div></div>").load("http://www.google.de", function { 
    $(element).append(this); 
}); 

回答

5

在打字稿,當您使用() =>語法,它實際上只是創建一個變量包含了「這個電流意思」,然後代用品this用法調用生成的變量。您可以在需要this的兩種含義的情況下手動執行此操作。

這裏有一些例子......在回調

正常使用thisthis是事件目標。

$('div').click(function() { 
    // this is the clicked element 
    alert('this: ' + this.id); 
}); 

用於回調的TypeScript箭頭函數。 this是詞法範圍。

$('div').click(() => { 
    // this is the lexical scope 
    // i.e. the containing class, containing function, or window 
    alert('this: ' + this.id); 
}); 

手冊例如,創建一個名爲self變量包含詞彙範圍,並留下this是事件目標。

var self = this; 
$('div').click(function() { 
    // this is the clicked element 
    alert('this: ' + this.id); 

    // self is the lexical scope 
    // i.e. the containing class, containing function, or window 
    alert('self: ' + self.id); 
}); 

值得一銘記的JavaScript走在運行範圍鏈,因此,如果一個變量而不是一個函數的內部定義,JavaScript的檢查該變量的封閉功能。它一直在鏈上走,直到它檢查了全球範圍。

這個例子顯示了這個動作,但嵌套可以更深刻,它仍然有效(即innerFunction內部功能仍可範圍步行才能到test變量。

var example = function() { 
    var test = 'A test'; 

    var innerFunction = function() { 
     alert(test); // 'A test' 
    } 

    innerFunction(); 
} 

example(); 
1

正如你所期望的那樣。功能之外的任何變量是提供給您:

var element: JQuery; 
var someOther = "123"; 

$("<div></div>").load("http://www.google.de", function(){ 
    $(element).append(this); 
    $(this).text(someOther); 
}); 
+0

沒有真正期待這種行爲,我認爲範圍完全改變了,無論如何感謝你的簡短答案,有時你可以考慮其餘的。 –