我实例化一个新类时使用.call

时间:2018-03-10 13:06:49

标签: javascript node.js ecmascript-5 ecma

我尝试在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()

classA.js

module.exports = class ClassA {

    constructor() {
    }

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

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

}
  

TypeErrpr:this.doSomething2不是函数

1 个答案:

答案 0 :(得分: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();