1

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

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()

类A.js

module.exports = class ClassA {

    constructor() {
    }

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

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

}

TypeErrpr:this.doSomething2 不是函数

4

1 回答 1

0

在评论中,您已经阐明了您要执行的操作(这也是问题中的代码评论):

那我怎么能从 classA 调用 aFunction() 呢?

您可以通过让 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();

于 2018-03-10T13:16:36.193 回答