javascript构造函数中的大型参数列表

时间:2016-10-29 13:37:07

标签: javascript oop inheritance

我的教练在评论中告诉我,这里有大量参数,他的意思是什么?

function Product(id, name, cost, quantity, shortDescription, fullDescription) {
      this.id = id;
      this.name = name;
      this.cost = cost;
      this.quantity = quantity;
      this.shortDescription = shortDescription;
      this.fullDescription = fullDescription;
    }

1 个答案:

答案 0 :(得分:2)

您的idnamecostquantityshortDescriptionfullDescription参数(你会经常听到他们被称为{#1;}论证" 1 )到Product函数。他说六个太多了。这是一种风格和维护问题,意见可能会有所不同,但这就是他所说的。

您可以考虑使用单个options参数:

function Product(options) {
    this.id = options.id;
    this.name = options.name;
    this.cost = options.cost;
    this.quantity = options.quantity;
    this.shortDescription = options.shortDescription;
    this.fullDescription = options.fullDescription;
}

...您可以通过传入包含这些属性的对象来调用它,如下所示:

var p = new Person({
    id: 42,
    name: "Douglas Adams",
    cost: "Priceless",
    quantity: 0,
    shortDescription: "Great author",
    fullDescription: "Mostly harmless"
});

在ES2015及更高版本中,您可以使用解构参数执行此操作:

function Product({id, name, cost, quantity, shortDescription, fullDescription}) {
    // Note -----^-----------------------------------------------------------^
    this.id = id;
    this.name = name;
    this.cost = cost;
    this.quantity = quantity;
    this.shortDescription = shortDescription;
    this.fullDescription = fullDescription;
}

您仍然以相同的方式调用,并使用对象:

let p = new Person({
    id: 42,
    name: "Douglas Adams",
    cost: "Priceless",
    quantity: 0,
    shortDescription: "Great author",
    fullDescription: "Mostly harmless"
});

再次:那是ES2015及以上版本。

1 参数参数:在声明中,技术上正确的术语是"参数。"在调用中,术语是"参数"。例如,这是一个采用name 参数的函数

function foo(name) {
    // ...
}

...在这里我们用参数" Douglas"来调用它:

foo("Douglas");

在日常演讲中,谈论" name论证"是绝对可以的。不进行参数/参数区分。但这就是区别:声明中的抽象事物与呼叫中的具体事物。