TL; DR:
ChildClass
)时将对象作为参数传递.this
应该引用创建此实例的对象(而不是引用的上下文)parent.class.js
class ParentClass {
constructor(nativeObject, param1, param2) {
this.nativeObject = nativeObject;
this.param1 = param1;
this.param2 = param2;
}
// some logic here
}
module.exports = { ParentClass };
child.class.js
class ChildClass extends ParentClass {
// some logic here
}
module.exports = { ChildClass };
usingclasses.js
let { ChildClass } = require('path/to/my/child/class');
let param1 = 'idkSomeString';
let param2 = 42;
class MyCoolClass {
createChild() {
return new ChildClass(this, param1, param2);
}
}
module.exports = { MyCoolClass };
如您所见,我在ParenClass中传递了
this
bc,我需要知道(该逻辑未包含在示例中)ChildClass实例的创建位置。有很多文件,例如使用classes.js的和类不同的文件,但是每个文件都有自己的createChild()方法来创建ChildClass。
我想要达到的目标
usingclasses.js
let { ChildClass } = require('path/to/my/child/class');
let paramsObj1 = {
nativeObject: ' ', // ?????,
param1: 'idkSomeString',
param2: 42
};
let paramsObj2 = {
nativeObject: ' ', // ?????,
param1: 'idkSomeString',
param2: 42
};
class MyCoolClass {
createChild() {
return new ChildClass(paramsObj1 );
}
createAnotherChild() {
return new ChildClass(paramsObj2);
}
}
所以第一个问题是:
如何将所有
params
存储在顶部的单独变量(对象)中所以我可以做
new ChildClass(objectWithParams1)
,new ChildClass(objectWithParams2)
...
new ChildClass(objectWithParamsN)
以及如何传递上下文(ParentClass构造函数中的第一个参数),以便它引用创建此类实例的对象?
我确实知道,如果我愿意
let params = {
nativeObject: this,
param1: 'idkSomeString',
param2: 42
};
this
将引用params
对象,但我需要构造函数知道它是在MyCoolClass
中创建的更新
经过研究,我很好奇
.bind
是否与此类问题有关。当我实际上需要指定this
指的是什么时候?我可以以某种方式指定
this
引用MyCoolClass吗?这将使我可以将所有内容存储在顶部,然后在创建ChildClass的新实例时仅将一个对象作为参数传递
最佳答案
一种简单的方法是您在第一个示例中显示的方式(但请继续阅读以供选择):通过将this
传递给ChildClass
作为参数:
class MyCoolClass {
createChild() {
return new ChildClass(this, paramsObj1);
}
createAnotherChild() {
return new ChildClass(this, paramsObj2);
}
}
ChildClass
的构造函数如下所示:constructor(parentObject, params) {
super(parentObject, params.param1, params.param2);
}
要么
constructor(parentObject, {param1, param2}) {
super(parentObject, param1, param2);
}
但是,如果您只想将一件事传递给
ChildClass
,则必须从MyCoolClass
的代码中分配它,也许是这样的:class MyCoolClass {
createChild() {
return new ChildClass({parentObject: this, ...paramsObj1});
}
createAnotherChild() {
return new ChildClass({parentObject: this, ...paramsObj2});
}
}
ChildClass
的构造函数如下所示:constructor(params) {
super(params.parentObject, params.param1, params.param2);
}
要么
constructor({parentObject, param1, param2}) {
super(parentObject, param1, param2);
}
关于javascript - 在保存上下文的同时,将对象作为构造函数的参数传递,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59320502/