如果没有传递参数,则在构造函数中创建默认值 - javascript

Create default in constructor function if no argument is passed - javascript

我有以下内容:

class example {
   constructor (arg) {
      this.value = arg.value
   }
   print () {
      console.log(this.value);
   }
}

var new_example = new example  ({
   value: 12,
})

new_example.print();

我如何设置一个默认值,比如值 = 10,这样,如果没有给出参数,它会打印 10。即:

var newer_example = new example ({
})

我试过类似的东西:

class example {
   constructor (arg) {
      this.value = (arg.value || 10)
   }
   print () {
      console.log(this.value);
   }
}

并且:

class example {
   constructor (arg) {
      this.value = ("undefined" != arg.value || 10)
   }
   print () {
      console.log(this.value);
   }
}

但是找不到任何有用的东西。

您可以使用内置 arguments 并像这样检查:

class example {
  constructor(arg) {
    this.value = arguments.length > 0 ? arg.value : 10;
  }
  print() {
    console.log(this.value);
  }
}

new example().print();
new example({ value: 12 }).print();
new example({ value: false }).print();
new example({ value: '' }).print();

您也可以(接近您所拥有的)验证 arg 是否已定义:

class example {
  constructor(arg) {
    if (arg && typeof arg.value !== "undefined") {
      this.value = arg.value;
    } else {
      this.value = 10;
    }
  }
  print() {
    console.log(this.value);
  }
}

new example().print();
new example({ value: 12 }).print();

或者如果不需要所有虚假值,您可以使用 shorthand:

执行上述操作

class example {
  constructor(arg) {
    this.value = (arg && typeof arg.value === 'number') ? arg.value : 10;
  }
  print() {
    console.log(this.value);
  }
}

new example().print();
new example({ value: 12 }).print();
new example({ value: 0 }).print();
new example({ value: false }).print(); //value false is lost

class example {
   constructor (arg) {
      this.value = (arg.value || 10)
   }
   print () {
      console.log(this.value);
   }
}

这段代码对我有用。我认为你的问题在第六行 console.log(value)这个应该是console.log(this.value)(你忘记了this.)。常见错误!

您可以使用对象解构来获得更简洁的代码:

class example {
    constructor (arg = {['value']:3}) {
        this.value = arg.value
    }
    print () {
        console.log(this.value);
    }
}

print 在未向构造函数传递任何内容的情况下调用创建的对象,将具有控制台输出 3:

var newer_example = new example()
newer_example.print(); /// Console prints `3`

您可以对参数使用默认值,并且可以对对象属性使用具有更多默认值的解构以支持 new example()new example({}):

class example {
   constructor ({ value = 10 } = {}) {
      this.value = value
      // Note: You could also use Object.assign(this, { value }) which
      // can become useful once you have more values in your object
   }
   print () {
      console.log(this.value);
   }
}