【问题标题】:Default enum value in javascript class constructorjavascript类构造函数中的默认枚举值
【发布时间】:2016-06-14 15:10:44
【问题描述】:

我有一个简单的类,我正在尝试弄清楚如何在构造函数中设置默认值:

var Foo = function(bar = Foo.someEnum.VAL1) {

    this.bar = bar;
    someEnum = {VAL1 : 1, VAL2: 2};
}

并像这样使用它:

var myFoo = new Foo(Foo.someEnum.VAL1);

但这显然是错误的。设置默认枚举值的正确方法是什么,或者我需要将默认设置为null,并在构造函数中检查null并进行相应设置?

澄清一下,bar 是 Foo 类的枚举。类中还有其他未显示的属性。另外,更新了课程代码。

【问题讨论】:

  • 发布函数的预期结果以及您希望调用它的方式会很有帮助
  • 我只想指出,当您执行var Foo = function() 时,您正在创建一个名为 Foo 的全新变量,其中没有任何内容。所以那时没有 Foo.someEnum.VAL1 这样的东西。
  • @millerbr 更新了,这是一门课。
  • 这不是一门课。在 ES6 中,一个类是用 class className() 定义的,它在 ES6 之前的任何东西中都不存在 - 请参阅 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • @millerbr 目前支持类的最新浏览器,所以它们对我没有用。

标签: javascript class enums


【解决方案1】:

如果你想让 bar 成为一个可选参数,你可以试试这个:

function Foo(bar) {
    this.bar = bar || Foo.enum.VAL1; //If bar is null, set to enum value.
}

//Define static enum on Foo.
Foo.enum = { VAL1: 1, VAL2: 2, VAL3: 3 };

console.log(new Foo().bar); //1
console.log(new Foo(Foo.enum.VAL3).bar); //3

【讨论】:

    【解决方案2】:

    您是否只想在函数内部定义bar

    var Foo = function() {
        var bar = {VAL1 : 1, VAL2: 2};
    }
    

    或者对于一个空白的起始对象:

    var Foo = function() {
        var bar = {};
    }
    

    或者您是否希望通过传递给函数的参数对其进行设置?

    var Foo = function(barIn) {
        var bar = barIn;
    }
    

    另一个选项 - 从传入的值创建对象(枚举):

    var Foo = function(val1, val2) {
        var bar = {VAL1 : val1, VAL2: val2};
    }
    

    可能性还在继续,但您要达到的目标并不完全清楚。

    【讨论】:

      【解决方案3】:

      我不完全确定您要做什么,但也许是这样......

      var Foo = function (bar = 1) {
          this.bar = bar;
      }
      Foo.VAL1 = 1;
      Foo.VAL2 = 2;
      

      现在你可以这样做了:

      foo1 = new Foo();
      alert(foo1.bar); //alerts 1;
      
      foo2 = new Foo(Foo.VAL2);
      alert(foo1.bar); //alerts 2;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-19
        • 1970-01-01
        • 2020-10-28
        相关资源
        最近更新 更多