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/

    10-10 07:13