JavaScript 类: 从对象的函数中访问方法 属性

JavaScript Classes: Accessing method from within an Object's function property

我想知道是否有人知道我遇到的问题的解决方案。假设我们有以下 JavaScript class:

class foo {

    // Class Method.
    makeNoise() {
        console.log("bar");
    }

    // Class Object
    classObject = {
        makeASound: function() {
            makeNoise();
        }
    }
}

现在,如果我打电话给:

var foo = new foo();
foo.classObject.makeASound();

我会得到一个错误,说 makeNoise 没有定义。使用 'this.' 是行不通的,因为在此上下文中它会在 classObject 中查找函数,因此会抛出 'is not a function' 错误。无论如何都可以从对象的函数中访问 makeNoise。

尝试this.makeNoise()

classObject = {
    makeASound: () => {
        this.makeNoise();
    }
}

更新:如果我们为 makeASound 使用箭头函数,我们可以保留我们的 this 绑定到父级 class。 GMaiolo 的回答是正确的。

您需要使用 arrow function in order to avoid creating a new context and then use the keyword this 才能正确访问 class 的 makeNoise 方法

class Foo {
  makeNoise() {
    console.log("bar");
  }
  classObject = {
    makeASound: () => { // arrow function for lexical scope
      this.makeNoise(); // using `this` to refer to the Foo method
    },
  };
}

如果愿意,您也可以使用 Function.bind()