ES6类默认值

Leo*_*ves 15 javascript ecmascript-6 babeljs

是否可以创建一个ES6类,如果它没有在新方法中传递,则为属性分配默认值?

class myClass {
    constructor(options) {
        this.a = typeof options.a !== 'undefined' ? options.a : 'default a value';
        this.b = typeof options.b !== 'undefined' ? options.b : 'default b value';
        this.c = typeof options.c !== 'undefined' ? options.c : 'default c value';
    }
}

var myClassWithValue = new myClass({a:'a value', b: 'b value'});
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用此代码执行此操作,使用babeljs进行编译,则会出现TypeError:无法设置未定义的属性"c".

也许我没有得到javascript中的类如何工作.

Jar*_*a X 21

如果您打算使用ES6,为什么不使用所有ES6,即参数和解构赋值的默认值

class myClass {
  constructor({a = 'default a value', b = 'default b value', c = 'default c value'} = {a:'default option a', b:'default option b', c:'default option c'}) {
    this.a = a;
    this.b = b;
    this.c = c;
  }
}
var v = new myClass({a:'a value', b: 'b value'});
console.log(v.toSource());
var w = new myClass();
console.log(w.toSource());
Run Code Online (Sandbox Code Playgroud)

http://www.es6fiddle.net/ibxq6qcx/

编辑:还测试并确认在https://babeljs.io/repl/上运行

  • @Bergi那是什么呢? (4认同)

ale*_*eha 14

Object.assign也适用于我

class RenderProperties {
   constructor(options = {}){
        Object.assign(this, {
            fill : false, 
            fillStyle : 'rgba(0, 255, 0, 0.5)',
            lineWidth : 1,
            strokeStyle : '#00FF00'
        }, options);
    }
}
Run Code Online (Sandbox Code Playgroud)


Mat*_*our 5

我建议如下:

class myClass {
  constructor(options) {
    const defaults = {
      a: 'default a value',
      b: 'default b value',
      c: 'default c value'
    };
    const populated = Object.assign(defaults, options);
    for (const key in populated) {
      if (populated.hasOwnProperty(key)) {
        this[key] = populated[key];
      }
    }
  }
}

var myClassWithValue = new myClass({a:'a value', b: 'b value'});
Run Code Online (Sandbox Code Playgroud)


Luc*_*ach 5

如果没有参数通过构造函数,它会被分配一个默认值,因为它是预先设置的,我希望我有帮助!

class User {
  constructor(fullName = "fooName", lastName, canAccess = false) {
    this.fullName = fullName;
    this.lastName = lastName;
    this.canAccess = canAccess;
  }
}
Run Code Online (Sandbox Code Playgroud)


Nik*_*tic 5

如果你想有一些属性默认但有些不是,你也可以使用扩展运算符(与 Object.assign 答案相同)

const defaults = {someDefault: true};

class SomeClass {
    constructor(config) {
        this.config = {...defaults, ...config};
    }
}
Run Code Online (Sandbox Code Playgroud)