具有多个参数的构造函数?

时间:2018-04-16 14:04:04

标签: javascript

我看到很多的构造函数示例是

function Person(first, last, age, eyecolor) {
    this.firstName = first;
    this.lastName = last;
    this.age = age;
    this.eyeColor = eyecolor;
    this.nationality = "English";
}

但是,如果您想要许多参数,例如20+,那该怎么办?这似乎效率低下。 声明一个接受许多参数的构造函数的正确有效方法是什么?

我的最终目标是创建一个包含大量用户设置的图像滑块(slidesToShow,slidesToScroll,slideClass等)。所以我希望让用户初始化它并提供选项。我现在拥有它的方式有点奇怪哈哈。例如:

function Slider(options) {
 const slideClass = options.slideClass
}

然后像这样初始化:

const demoSlider = new Slider({
 slideClass: 'image-slider'
})

但我没有像普通的构造函数那样使用 this 关键字,但它也不是对象文字。所以我的代码必须构建错误?刚刚从主要jQuery切换尝试以正确的方式学习/编写vanilla JS。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

只需将对象存储在this.options

 function Slider(options) {
    this.options = options;
 }

或者,如果您想直接在this下,只需使用对象分配:

 function Slider(options) {
   Object.assign(this, options);
    console.log(this.name);
 }

 new Slider({ name: "test" });

答案 1 :(得分:0)

我认为你最好逐个设置它们,因为它们可能有默认值,例如:

this.height = (options.height)?options.height:100;

另外,我认为您并不完全理解new的含义。

您没有使用this,这意味着所有变量都在您的函数中,

也许在这种情况下你只需要执行一次该功能来启动你的滑块事件。

因此您只需致电Slider(options)

new Slider()将创建一个可以重用的对象,

但你甚至没有分配到像var mySlider = new Slider() ...

这样的var

在这种情况下,您应该考虑是否需要将功能设计为functionconstructor