JavaScript对象中的此关键字未指向该对象

时间:2015-09-08 04:59:24

标签: javascript function object

我有一些代码,我使用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>

我的情况下的页面会导致错误,错误如下所示。

Error from using this

我有与上面的代码段类似的代码。我的代码如下所示。 此外,单击按钮时会调用下面对象中的函数,这可能就是this未引用对象AutoSizedStandardDialogs对象的原因。可能有另一种方法在单击按钮时引用对象AutoSizedStandardDialogs

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

问题:为什么我使用this的情况不起作用,如何强制this指向包含这些功能的对象?

1 个答案:

答案 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
},