【问题标题】:Calling a method which refers to an object property throws a ReferenceError调用引用对象属性的方法会引发 ReferenceError
【发布时间】:2019-08-08 08:13:53
【问题描述】:

在下面的代码中,obj.sayhello() 行表示sayhelloobj 的上下文/范围内执行。 str 未在sayhello 方法中定义(通过var。 JS 将在范围内查找变量,即在 obj 中,它显然具有 str 属性。为什么脚本会抛出ReferenceError

未捕获的ReferenceErrorstr 未在Object.sayhello 中定义

var obj = {
    str: "hello",
    sayhello: function(){
      return str;
    }
  };

obj.sayhello();

【问题讨论】:

  • str 不是变量而是对象属性。您必须使用this 访问它——this.str 将产生正确的值。
  • 强相关:Self-references in object literals / initializers — 这有完全相反的问题,但会导致类似的错误。在那个问题中,使用了this,但没有使用function;在这里,情况正好相反。我认为这些足够不同,因此不应将其作为重复项关闭。也相关:var vs this in Javascript object.

标签: javascript javascript-objects


【解决方案1】:

因为你在 obj 范围内,你应该返回this.str

str 本身不是其简单定义中的变量,它是对象的属性。因此,您不能简单地访问str,而必须访问something.str。如果在对象之外,则为obj.str,如果在对象内部,则为this.str

【讨论】:

    【解决方案2】:

    要引用同一对象,您需要使用thisreturn str; => return this.str;

    var obj = {
        str: 'hello',
        sayhello: function (){ return this.str; } // <==
    }
    
    obj.sayhello()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 2016-10-09
      • 2021-08-11
      • 1970-01-01
      • 2019-02-07
      相关资源
      最近更新 更多