如何覆盖对象变量

Ste*_*MMo 1 javascript

我想使用类似JQuery .ajax(..)的语法来配置Javascript对象,而不是参数列表,只定义与默认值不同的值.
到目前为止,我写道:

function ObjFn(config) {
  var var1 = 200  
  var var2 = "qwerty"
  var var3 = 555

  if (config instanceof Object){
    console.log("-> config")
    if (config.var1 !== undefined) var1 = config.var1
    if (config.var2 !== undefined) var2 = config.var2
    if (config.var3 !== undefined) var3 = config.var3
  }

  this.describe = function(){
    console.log("var1: "+var1+" - "+"var2: "+var2+" - "+"var3: "+var3+" - "+"config: "+config+"\n")
  }
}
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有可能避免编写条件列表:

if (confing.var !== undefined) var = config.var
Run Code Online (Sandbox Code Playgroud)

对于每个可能的可覆盖变量,但只是以某种方式使用变量的名称.

Cer*_*nce 6

你可以解构configvar1,var2var3变量,使用默认属性值.如果config不是对象,则从空对象中进行解构,以便使用这些默认参数:

function ObjFn(config) {
  const { var1=200, var2="querty", var3=555} =
    config instanceof Object
    ? config
    : {};
  this.describe = function(){
    console.log("var1: "+var1+" - "+"var2: "+var2+" - "+"var3: "+var3+" - "+"config: "+config+"\n")
  }
}
const instance = new ObjFn({ var1: 333 });
instance.describe();

const instance2 = new ObjFn();
instance2.describe();
Run Code Online (Sandbox Code Playgroud)

如果参数(如果传递)将始终是对象,则可以在参数列表中进行解构:

function ObjFn({ var1=200, var2="querty", var3=555} = {}) {
  this.describe = function(){
    console.log("var1: "+var1+" - "+"var2: "+var2+" - "+"var3: "+var3)
  }
}
const instance = new ObjFn({ var1: 333 });
instance.describe();

const instance2 = new ObjFn();
instance2.describe();
Run Code Online (Sandbox Code Playgroud)