小编典典

在Javascript中,为什么“ this”运算符不一致?

javascript

在JavaScript中,“ this”运算符可以在不同情况下引用不同的事物。

通常,在JavaScript“对象”内的方法中,它引用当前对象。

但是当用作回调时,它成为对调用对象的引用。

我发现这会在代码中引起问题,因为如果您在JavaScript“对象”中使用方法作为回调函数,则无法确定“ this”是指当前的“ object”还是“
this”是指当前对象。调用对象。

有人可以澄清有关如何解决此问题的用法和最佳实践吗?

   function TestObject() {
            TestObject.prototype.firstMethod = function(){
                      this.callback();
                      YAHOO.util.Connect.asyncRequest(method, uri, callBack);

            }

            TestObject.prototype.callBack = function(o){
              // do something with "this"
              //when method is called directly, "this" resolves to the current object
              //when invoked by the asyncRequest callback, "this" is not the current object
              //what design patterns can make this consistent?
              this.secondMethod();
            }
            TestObject.prototype.secondMethod = function() {
             alert('test');
            }
        }

阅读 362

收藏
2020-04-25

共1个答案

小编典典

在JavaScript中,this总是指调用正在执行的功能的对象。因此,如果将该函数用作事件处理程序,this则将引用激发该事件的节点。但是,如果您有一个对象并在其上调用一个函数,例如:

myObject.myFunction();

然后this里面myFunction会参考myObject。是否有意义?

为了解决这个问题,您需要使用闭包。您可以按以下方式更改代码:

function TestObject() {
    TestObject.prototype.firstMethod = function(){
        this.callback();
        YAHOO.util.Connect.asyncRequest(method, uri, callBack);
    }

    var that = this;
    TestObject.prototype.callBack = function(o){
        that.secondMethod();
    }

    TestObject.prototype.secondMethod = function() {
         alert('test');
    }
}
2020-04-25