Эффективный и элегантный способ создания вложенных классов ES6? - PullRequest
0 голосов
/ 09 июня 2019

Пытаясь найти способ использовать вложенные классы в JS, я придумал такую ​​вещь:

class Character {
    constructor() {
        this.Info= class I {
            constructor(name,value) {
                this.name=name;
                this.value=value;   
            }
        };
    }
    bar () {
        var trial = new this.Info("Goofy", 2);
        alert(trial.name);
    }
}

var test = new Character();
test.bar();

, и, похоже, это работает.Однако я боюсь, что это может быть создание нового объекта функции для каждого вызова new, так как я определяю класс в конструкторе (который выполняется при каждом вызове new).Есть ли более эффективный способ сделать это?

Этот вопрос не решает мою проблему, поскольку автор только задается вопросом, как вообще иметь вложенный class;Я уже могу это сделать, но мне интересно, есть ли более эффективный способ.

Ответы [ 2 ]

3 голосов
/ 09 июня 2019

Использование статического свойства в реакции, углового или только с использованием babel, поскольку прямые статические свойства класса в настоящее время не реализованы во всех браузерах.

class Character {

    static Info = class I {
        constructor(name) { this.name=name; }
    }

    bar () {
        return new Character.Info("Goofy");
    }
}

const test = new Character();
console.log(test.bar());

Использование статического свойства старым способом - в настоящее время работает надвсе браузеры.

class Character {
    bar () { return new Character.Info("Goofy"); }
}

Character.Info = class I {
    constructor(name) { this.name=name; }
}

const test = new Character();
console.log(test.bar());
2 голосов
/ 09 июня 2019

Возможно, приведенный вами пример слишком прост, чтобы продемонстрировать любую проблему, которую вы пытаетесь решить, но мне кажется, что вам вообще не нужно их вкладывать.

class Info {
  constructor(name, value) {
    this.name = name;
    this.value = value;
  }
}

class Character {
  bar() {
    var trial = new Info("Goofy", 2);
    console.log(trial.name);
  }
}

const test = new Character();
test.bar();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...