在Javascript中,为什么“this”操作符不一致?

在Javascript中,为什么“this”操作符不一致?

在JavaScript中,“this”操作符可以在不同的场景中引用不同的内容。

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

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

我发现这会导致代码中的问题,因为如果使用JavaScript“Object”中的方法作为回调函数,则无法判断“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');
            }
        }


开满天机
浏览 418回答 3
3回答

米琪卡哇伊

在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');     }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript