如何用更少的代码在Javascript类中分配多个属性?
我试过“this”的基本用法。然而,尽管来自OOP是很自然的,我仍然觉得它冗长。想象一下,我有1000处房产:我会有麻烦的如何用更少的代码在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
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*/}
?是的。我会处理这些属性,我需要它的函数。这就是为什么我选择将它们封装在一个类中