如何用更少的代码在Javascript类中分配多个属性?

如何用更少的代码在Javascript类中分配多个属性?,javascript,class,object,Javascript,Class,Object,我试过“this”的基本用法。然而,尽管来自OOP是很自然的,我仍然觉得它冗长。想象一下,我有1000处房产:我会有麻烦的 class Question{ constructor(number, point, beginning, A, B, C){ this.number = number; this.grade = grade; this.beginning = beginning; this.A = A; this.B = B; this.C

我试过“this”的基本用法。然而,尽管来自OOP是很自然的,我仍然觉得它冗长。想象一下,我有1000处房产:我会有麻烦的

class Question{
constructor(number, point, beginning, A, B, C){
    this.number = number;
    this.grade = grade;
    this.beginning = beginning;
    this.A = A;
    this.B = B;
    this.C = C;
}
}


那么,有没有办法用更少的代码为Javascript对象分配属性呢?

而您可以使用
对象。分配
和速记属性:

constructor(number, point, beginning, A, B, C){
    Object.assign(
        this,
        {
            number,
            grade,
            beginning,
            A,
            B,
            C,
        }
    );
}
一旦开始获取大量参数,调用者就很难理解发生了什么。例如:

new Question(8, 5, 2, 's', 33, 9)
调用方可能很不清楚所有这些属性都指什么。您可以将单个对象作为参数传递,这既可以从调用方的角度明确哪些属性对应于哪个值,也可以使构造函数更加简洁:

const q = new Question({
    number: 8,
    grade: 5,
    // ...
});
综上所述,如果你的
问题
除了构造函数之外真的没有别的东西,我会完全省略这个类,使用一个普通的对象文本;这门课没有提供任何好处

const q = {
  number: 8,
  grade: 5,
  // ...
};

您可以使用
对象。分配
和速记属性:

constructor(number, point, beginning, A, B, C){
    Object.assign(
        this,
        {
            number,
            grade,
            beginning,
            A,
            B,
            C,
        }
    );
}
一旦开始获取大量参数,调用者就很难理解发生了什么。例如:

new Question(8, 5, 2, 's', 33, 9)
调用方可能很不清楚所有这些属性都指什么。您可以将单个对象作为参数传递,这既可以从调用方的角度明确哪些属性对应于哪个值,也可以使构造函数更加简洁:

const q = new Question({
    number: 8,
    grade: 5,
    // ...
});
综上所述,如果你的
问题
除了构造函数之外真的没有别的东西,我会完全省略这个类,使用一个普通的对象文本;这门课没有提供任何好处

const q = {
  number: 8,
  grade: 5,
  // ...
};

我想不出哪种语言可以在少于N个语句中分配N个命名属性。如果您使用的是typescript,那么参数属性也可能是一个选项:如果您在一个对象上有1000个属性,您会遇到更大的问题:)您想要类似于复制构造函数的东西吗?如果值来自另一个问题对象(或具有所需属性的任何其他对象),则可以循环遍历属性并使用indexer[]语法指定给“this”。对吗?我只是想让问题对象有多个属性。如果我传递一个对象,在方法内部操作后,它不应该是相同的吗?我想不出一种语言,其中N个命名属性可以在少于N个语句中分配。如果您使用typescript,那么参数属性也可能是一个选项:如果您在一个对象上有1000个属性,那么您将有更大的问题:)您想要类似于复制的东西吗建造师?如果值来自另一个问题对象(或具有所需属性的任何其他对象),则可以循环遍历属性并使用indexer[]语法指定给“this”。对吗?我只是想让问题对象有多个属性。如果我传递一个对象,那么在方法内部操纵它之后,它不应该是相同的吗?谢谢!顺便说一下,在你提到的最后一个例子中。如何在该对象中插入函数?与一个属性类似,func:fn()。
func(){/*do stuff*/}
?是的。我会处理这些属性,我需要它的函数。这就是为什么我选择将它们封装在一个类中的原因谢谢!顺便说一下,在你提到的最后一个例子中。如何在该对象中插入函数?与一个属性类似,func:fn()。
func(){/*do stuff*/}
?是的。我会处理这些属性,我需要它的函数。这就是为什么我选择将它们封装在一个类中