【问题标题】:How to pass options to class in a class?如何在课堂上将选项传递给课堂?
【发布时间】:2019-07-03 18:49:18
【问题描述】:

有一个创建容器的类。我使用它两次来创建 2 个容器,但我只想使用它一次(并且仍然创建 2 个容器)。当我将new Container() 放入类方法时,会出现无限循环(很明显)。如何让班级成为另一个(相同的)班级?

我敢打赌这是可能的。如果是这样,是否有可能将settings 传递给第二类,但 NOT 在参数中?也许我可以在二等舱使用另一种头等舱方法,但使用头等舱的this.options

为了清楚起见,“第一类”是指Container 类的第一次运行,而“第二类”是指在内部首先创建的另一个Container class

https://jsfiddle.net/rqhwsv2p/5/

class Container {
    constructor(element, className, settings) {
        this.init(element, className, settings);
    }

    init(element, className, settings) {
        var template = '<div class=' + className + '></div>';
        var container = $(template);

        element.append(container);

        if (settings) {
            this.settings = settings;

            this.getSettings();
            console.log('settings:::::', this.settings);
        }
    }

    getSettings() {
        return this.settings;
    }
}

var body = $('body');
var settingsOuter = {enable: true, visible: true, color: true};

var outer = new Container(body, 'container', settingsOuter);
var inner = new Container($('.container'), 'inner-container');

【问题讨论】:

  • 第二个容器是第一个容器的属性可以吗?您计划如何访问第二个容器?另外,第一个容器如何知道将哪些参数传递给第二个容器?请提供更多详细信息/示例。
  • 让我们试试这个属性。我举了一个例子,其中一个在另一个内部(inner-containercontainer) 内部,但它也可以是第二个附加到正文。没关系,它可能工作方式相同。我只需要传递@987654330 @.
  • options 是指settings 吗?因为我在您发布的代码中的任何地方都看不到任何options。同样在您的示例中,您将 $('.container')'inner-container' 作为参数传递给第二个容器。外部容器如何知道将它们传递给内部容器?
  • 是的,我的意思是settings,对不起。正如我告诉你的,传递的参数只是示例。您可以在每次运行类时使用body。第二个参数是示例元素类。每次运行一个班级意味着new className(arguments) 对吗?因此,在我的示例中,有传递参数,没有任何特殊参数。我不明白你的观点。
  • 我猜我错过了什么,但看起来@guest271314 想出了一些东西,所以一切都很好:)

标签: javascript jquery ecmascript-6 es6-class


【解决方案1】:

您可以将settings 定义为class constructor 的默认参数

class Container {
    constructor(element, className, settings = {enable: true, visible: true, color: true}) {
        this.init(element, className, settings);
    }

    init(element, className, settings) {
        var template = '<div class=' + className + '></div>';
        var container = $(template);

        element.append(container);

        if (settings) {
            this.settings = settings;

            this.getSettings();
            console.log('settings:::::', this.settings);
        } else {
            this.settings = void 0;
        }
    }

    getSettings() {
        return this.settings;
    }
}

【讨论】:

  • 问题是我做不到。每个元素都意味着有它自己的选择。我需要从第一堂课中获取设置并在第二堂课中实现其中的一些(我在第二堂课中没有)。
  • @hames 默认参数可以是默认行为,对元素没有影响,只有当传递的对象的属性值与默认参数不同时,才会更改那些特定的属性值。要使用第一个创建的类的设置,您可以使用var inner = new Container($('.container'), 'inner-container', outer.getSettings())
  • 好的,谢谢,这是唯一的方法。但是除了在类参数中传递它之外,是否可以通过其他方式来做到这一点?
  • @hames 有几种方法可用于实现预期结果。您可以将.push() 每个new Container() 放到一个数组中,并从数组的最后一个元素中获取settings。虽然如果每个 new Container() 实例使用相同的 settings,您可以简单地使用相同的 settingsOuter 变量。
  • @hames 出于什么原因?如果每个new Container() 实例使用相同的settings,您可以简单地使用相同的settingsOuter 变量。您能否创建一个 stacksn-p 来准确展示您想要实现的目标?
猜你喜欢
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-31
  • 1970-01-01
  • 2019-03-26
  • 1970-01-01
相关资源
最近更新 更多