'这'在下一个范围内未定义

时间:2016-05-24 13:32:01

标签: javascript scope this undefined

我的问题就像标题一样简单..我有一些代码可以进行AJAX调用。此代码与此类似(JSFiddle):

SELECT i.ID, MIN(s.Registered) AS 'Date', l.Name AS 'Status'    
FROM Installation i
JOIN StatusLog s ON s.InstallationID = i.ID AND s.ID IN 
    (SELECT MIN(Registered) 
     FROM statuslog 
     WHERE status IN(5)
     GROUP BY Installationid)
JOIN StatusList l ON l.ID = s.Status

在这种情况下,function Test() { this.name = "U don't wanna know my name.."; } Test.prototype.ajax = function() { $.ajax("url/path", data, function() { alert(this.name); }); }; var test = new Test(); test.ajax(); 未定义。我可以在ajax调用之前放置以下代码,并使用它而不是this

this

我想知道是否有另一种方法可以使用var diz = this; 而不为其创建新变量。

1 个答案:

答案 0 :(得分:1)

  

在这种情况下,这是未定义的。

this.name未定义(假设您的意思),因为这是特定于函数的上下文。在ajax的回调处理程序this内部不再属于Test,它属于该回调函数。

  

想知道是否有另一种方法可以在不创建的情况下使用它   它的新变量。

我认为如果不保存对父this(测试版this)的引用,您可以从函数范围访问属于更全局范围的this