2015-09-08 91 views
0

我有一些代碼在其中通過使用this來引用同一對象中的方法。我已經驗證this通過使用下面的代碼示例引用當前對象。JavaScript對象中的這個關鍵字沒有指向那個對象

在我的情況我有類似的代碼,但它與很多其他第三方ASP.Net控件,它們發出自己的JavaScript。但在我的情況下,如果使用this,則使用相同的方法,因爲this指向「Sys.UI.DomEvent」,所以它無法工作。

<!DOCTYPE html> 
<html> 
<body> 

<p>Creating and using an object method.</p> 

<p>An object method is a function definition, stored as a property value.</p> 

<p id="demo"></p> 

<script> 
var person = { 
    firstName: "Sunil", 
    lastName : "Kumar", 
    id  : 5566, 
    fullName : function fullName() { 
     return this.newName(this.firstName + " " + this.lastName); 
    }, 
    newName : function newName(nm) { 
     return 'new ' + nm; 
    } 
}; 

document.getElementById("demo").innerHTML = person.fullName(); 
</script> 
</body> 
</html> 

在我的情況頁面導致錯誤,錯誤如下。

Error from using this

我有類似的代碼如上述代碼段。我的代碼如下所示。 此外,單擊按鈕時會調用下面對象中的函數,並且可能這就是爲什麼this未引用對象AutoSizedStandardDialogs對象。單擊按鈕時可能有另一種方法來引用對象AutoSizedStandardDialogs

var AutoSizedStandardDialogs = { 
    applyAutoSizeLogic: function applyAutoSizeLogic() { 
    //code omitted 
    }, 
radalert: function radalert() { 
    this.applyAutoSizeLogic(); 
    //code omitted 
    } 
} 

問題:使用this我的情況爲什麼不工作,我怎麼能強迫this指向由含有這些函數的對象?

+4

完美地工作[這裏](https://jsfiddle.net/tusharj/8190p98m/) – Tushar

+0

對不起,我需要改變的代碼。在我的情況下,代碼是不同的,但我認爲它是這樣的。我會盡快修改的。 – Sunil

+0

這也適用。檢查[這裏](https://jsfiddle.net/tusharj/8190p98m/1/),如果你不能重現這個問題,試試下面的答案,這將解決你的問題 – Tushar

回答

1

在你顯示的代碼中,它正常工作。你可以檢查demo

您可以使用bind()結合上下文如下:

fullName : function fullName() { 
    return this.newName(this.firstName + " " + this.lastName); 
}.bind(this), 
//^^^^^^^^^^ 

OR,緩存的背景下,並用它裏面的

但是,如果你面臨的問題,如問題陳述功能

self: this, // Cache context 
fullName : function fullName() { 
    return self.newName(self.firstName + " " + self.lastName); // Use cached variable here 
}, 
+0

所以在我的情況下'this'指向'Sys.UI.DomEvent',因爲它綁定了它?如果是的話,那麼我會因爲我使用很多第三方庫而改變'this'的含義而導致問題。 – Sunil

+0

@Sunil然後你可以使用上下文緩存的第二種方法 – Tushar

+0

,所以'self'總是指向包含的對象? – Sunil

相關問題