当我实例化一个新的 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();
我尝试在我的 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();