当前位置: 首页 > 面试题库 >

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

孟均
2023-03-14
问题内容

在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');
            }
        }

问题答案:

在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');
    }
}


 类似资料:
  • 本文向大家介绍JavaScript中的运算符是什么?,包括了JavaScript中的运算符是什么?的使用技巧和注意事项,需要的朋友参考一下 让我们采用一个简单的表达式“ 4 + 5等于9”。这里4和5称为操作数,“ +”称为运算符。 JavaScript支持以下类型的运算符。 算术运算符 比较运算符 逻辑(或关系)运算符 赋值运算符 条件(或三元)运算符 例 这是一个说明运算符示例的示例-

  • 问题内容: 我是一个仅出于乐趣而编写代码的人,并且在学术或专业环境中都没有真正地去研究它,所以像这些按位运算符之类的东西真的让我感到困惑。 我正在阅读一篇有关JavaScript的文章,该文章显然支持按位操作。我一直看到该操作在某些地方提到过,并且我尝试阅读以弄清楚它到底是什么,但是我似乎一点也不了解。那是什么 清楚的例子会很棒!:D 再问几个问题-按位运算的一些实际应用是什么?您什么时候可以使用

  • 本文向大家介绍什么是JavaScript中的增量(++)运算符?,包括了什么是JavaScript中的增量(++)运算符?的使用技巧和注意事项,需要的朋友参考一下 增量运算符将整数值加1。这是一个示例,其中使用递增运算符两次将a的值递增两次 示例

  • 本文向大家介绍JavaScript中的条件运算符是什么?,包括了JavaScript中的条件运算符是什么?的使用技巧和注意事项,需要的朋友参考一下 条件运算符首先对表达式的真值或假值求值,然后根据求值结果执行两个给定语句之一。 序号 运算符和说明 1 ?:(视情况而定) 如果条件为真?然后取值X:否则取值Y 示例 尝试以下代码以了解条件运算符在JavaScript中的工作方式:

  • 本文向大家介绍JavaScript中的赋值运算符是什么?,包括了JavaScript中的赋值运算符是什么?的使用技巧和注意事项,需要的朋友参考一下 使用赋值运算符,您可以将值分配给变量。JavaScript支持以下赋值运算符- 序号 运算符和说明 1 =(简单分配) 从右侧操作数到左侧操作数分配值 例如: C = A + B将A + B的值分配给C 2 + =(添加和分配) 将右操作数添加到左操作

  • 本文向大家介绍什么是JavaScript中的逻辑运算符?,包括了什么是JavaScript中的逻辑运算符?的使用技巧和注意事项,需要的朋友参考一下 JavaScript支持以下逻辑运算符。假设变量A持有10,变量B持有20,那么, 序号 运算符和说明 1 &&(逻辑与) 如果两个操作数都不为零,则条件变为true。 例如:(A && B)是真的。 2 | | (逻辑或) 如果两个操作数中的任何一个