创建嵌套ES6类的有效而优雅的方法?

时间:2019-06-09 00:12:25

标签: javascript class oop object

当试图找到一种在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调用中执行)。有更有效的方法吗?

This question不能解决我的问题,因为作者只想知道如何嵌套class;我已经能够做到这一点,但我想知道是否有更有效的方法。

2 个答案:

答案 0 :(得分:3)

在React,Angular或仅使用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());

答案 1 :(得分:2)

也许您给出的示例太简单了,无法展示您要解决的任何问题,但是在我看来,您根本不需要嵌套它们。

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();