当我实例化一个新的 class 时使用 .call

Use .call when I instantiate a new class

我尝试在我的 mainClass 中调用 classA 的函数。然后我尝试在 classA 中调用 mainClass 的函数。我尝试使用 .bind() 和 .call() 但它不起作用。它仅在我对函数使用 .bind(this) 或 .call(this) 时有效,但在我尝试实例化新的 class.

时无效

index.js

let ClassA = require('./ClassA')

class mainClass {

    constructor() {
        this.doSomething()
    }

    doSomething() {
        let classA = new ClassA().call(this)
        classA.doSomething()
    }

    aFunction() {
        console.log('done')
    }

}

new mainClass()

classA.js

module.exports = class ClassA {

    constructor() {
    }

    doSomething() {
        console.log('doSomething')
        this.doSomething2()
    }

    doSomething2() {
        this.aFunction() // main Class
    }

}

TypeErrpr: this.doSomething2 is not a function

在评论中你已经阐明了你想要做什么(这也是问题中的代码评论):

How can I call aFunction() from classA then?

您可以通过授予 ClassA 中的代码访问您的实例来做到这一点。您可以将它传递给可以将其保存为实例 属性 的构造函数,或者您可以将它传递给 doSomething.

这是一个将它传递给构造函数的示例:

class ClassA {

    constructor(obj) {           // ***
        this.obj = obj;          // ***
    }

    doSomething() {
        console.log('doSomething');
        this.doSomething2();
    }

    doSomething2() {
        this.obj.aFunction();    // ***
    }

}

class mainClass {

    constructor() {
        this.doSomething();
    }

    doSomething() {
        let classA = new ClassA(this);
        classA.doSomething();
    }

    aFunction() {
        console.log('done');
    }
}

new mainClass();