我有一些代码,我使用this
在同一对象中引用方法。我已使用下面的代码示例验证了this
引用了当前对象。
在我的情况下,我有类似的代码,但它与许多其他第三方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>
我的情况下的页面会导致错误,错误如下所示。
我有与上面的代码段类似的代码。我的代码如下所示。 此外,单击按钮时会调用下面对象中的函数,这可能就是this
未引用对象AutoSizedStandardDialogs
对象的原因。可能有另一种方法在单击按钮时引用对象AutoSizedStandardDialogs
!
var AutoSizedStandardDialogs = {
applyAutoSizeLogic: function applyAutoSizeLogic() {
//code omitted
},
radalert: function radalert() {
this.applyAutoSizeLogic();
//code omitted
}
}
问题:为什么我使用this
的情况不起作用,如何强制this
指向包含这些功能的对象?
答案 0 :(得分: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
},