构造函数中的 JavaScript 自定义参数

标签 javascript class constructor named-parameters

我使用 JavaScript (ECMAScript 5)。我有这样一个类:

我的类(class)

function elementClass(htmlType, cssClass, text, value, id) {
    this.htmlType = htmlType;
    this.cssClass = cssClass;
    this.text = text;
    this.value = value;
    this.id = id;
}

有时我需要设置一些属性,我想使用如下代码:

var newElement = new elementClass(htmlType ="div",cssClass = "form-group",id = "div1");

我需要将 div1 作为 id 传递,但它作为第三个参数传递。

我可以使用下面的代码来做到这一点:

var newElement3 = new elementClass();
newElement3.htmlType = "div";
newElement3.cssClass = "form-group";
newElement3.id = "div1";  

但我想尽量减少代码编号,例如:

var newElement = new elementClass(htmlType ="div",cssClass = "form-group",id = "div1");

fiddle

我阅读了很多主题,但找不到任何解决方案。

有什么办法吗?

提前致谢。

最佳答案

传递一个对象作为参数:

function ElementClass ( settings ){
  for(var key in settings){
    this[key] = settings[key];
  }     
}

所以你可以这样做:

var instance = new ElementClass({
  some:"other"
});

如果你想要默认参数/防止扩展你可以这样做:

function ElementClass( options ){
  var defaults = {
    some:"value"
    stays:"the same"
  };

  for(var key in defaults){
    this[key] = options[key] || defaults[key];
  }
}

所以如果你实例化它:

 new ElementClass({
   some:"stuff", //overridden
   whatever:"unknown" //omitted
 });

它会导致

{ some:"stuff", stays:"the same"}

关于构造函数中的 JavaScript 自定义参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46863517/

相关文章:

javascript - 在静态函数类中返回 this

javascript - 将 KnockoutJS 绑定(bind)到 Google map InfoWindow 内容

javascript - document.getElementById 返回 null

c++ - 我可以使用不同类的函数参数创建高阶函数吗?

c++ - 使用此代码时,我不断收到错误消息。我正在尝试在继承类中使用构造函数。 C++

javascript - 简单对象 vs. 工厂 vs. 构造函数——实例

javascript - 如何使用 Bobril 将图像添加到 SVG

objective-c - 如何构造一个非常大的 Objective-C 类?

c++ - 转发构造函数调用 2 次基类的复制构造函数

构造函数中泛型的 Java 类型错误