javascript - 如何在 JavaScript ECMA6 中重载构造函数?

标签 javascript constructor ecmascript-6 overloading constructor-overloading

<分区>

目标

在 JavaScript ECMA6 中实现一种允许构造函数重载的机制

为什么这不是重复的

话题Why doesn't JavaScript ES6 support multi-constructor classes? , 虽然 similar 和这个不一样。另一个主题仅关注使用 ECMAScript 版本的构造函数重载,而本主题关注 ECMA6。如果您正在寻找更新的答案,就是这个地方。

背景

我有一个带有给定构造函数的 JavaScript 类,我希望用户在实例化对象时能够拥有不同的构造函数。我假装的一个例子如下:

const DEFAULT_WHEEL_NUMBER = 4;
const DEFAULT_COLOR = "black";    
const DEFAULT_NAME = "myCar";

class Car{

    constructor(numberWheels, aName, aColor){
        this.wheelsNum = numberWheels;
        this.name = aName;
        this.color = aColor;
    }

    constructor(aName){
        this(DEFUALT_WHEEL_NUMBER, aName, DEFAULT_COLOR);
    }

    constructor(){
        this(DEFUALT_WHEEL_NUMBER, DEFAULT_NAME, DEFAULT_COLOR);
    }
}

在此代码中,用户可以使用三个构造函数,每个构造函数采用不同数量的参数。用法示例如下:

var car1 = new Car(3, "tricicle-car", "white");
var car2 = new Car("Opel"); //creates black car with 4 wheels called Opel
var car3 = new Car(); //creates a black car, with 4 wheels called myCar

问题

如果使用 Java 或 C#,这是一个简单的示例,因为这些语言具有构造函数重载。

但是,从 documentation on classes from MDN可以得出结论,JavaScript 没有。

问题

  1. 有没有办法使用 ECMA6 为 JavaScript 类实现类似的机制?如果不是,最好/最接近的替代方案是什么?

最佳答案

在 JavaScript 中没有针对此的内置解决方案。另一种解决方案是使用 arguments 对象(在某些情况下),或传递您自己的配置选项,类似于:

const defaults = {
    numberWheels: 4,
    color: "black",   
    name: "myCar"
}

class Car {
    constructor(options) {
         this.wheelsNum = options.numberWheels || defaults.numberWheels;
         this.name = options.name || defaults.name;
         this.color = options.color || defaults.color;
    }
}

这基本上是老派的解决方案,我在 ES3 中使用相同的逻辑。

关于javascript - 如何在 JavaScript ECMA6 中重载构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38240744/

相关文章:

javascript - ES6继承reactjs类时添加默认属性

javascript - 背景动画Vue Js/ES6

javascript - 用 javascript 调用替换内部 html 时出错

javascript - html注入(inject)中的jQuery脚本执行顺序

javascript对象方法定义区别

actionscript-3 - 在AS3中收到错误1026,不知道为什么

javascript - “箭头功能”和“功能”是否等效/可互换?

php - 调用 php 函数通过 ajax 显示我的帖子后,似乎无法访问 $wpdb

javascript - 当前年份的 jQuery 日期选择器 - 10

c++ - 初始化列表、可变参数模板和构造函数推导 : a strange case