具有待定义属性的对象

时间:2020-10-01 10:14:57

标签: javascript object properties

我想知道是否有一种方法可以定义在创建对象实例之前未定义的类的属性。可以说我想要一个具有多个属性的对象,例如:名称,宽度,重量,颜色。但是另一些时候,我想使用同一个对象来实例化不同的属性:名称,长度,类型,材料

class MultiProduct{
    constructor(atttobedefined1=a1, atttobedefined2=a2, atttobedefined3=a3, atttobedefined4=a4){
        this.atttobedefined1 = a1;
        this.atttobedefined2 = a2;
        this.atttobedefined3 = a3;
        this.atttobedefined4 = a4;
    }
}
var MP = new MultiProduct(name="tesla x",width="280cm",Weight="2000T",Color="Red");

最后,当要在屏幕上显示对象时,取决于属性,它会/可以像以下那样使用:

console.log(MP['width']); //in case this property 'width' exists
//output "280cm"

是否有任何方法可以得到这种方法,或者每当我要表示一个不同的属性/真实产品时,我都必须创建一个带有其setter和getter的新对象?我特别要求使用JavaScript,但我想知道(一般而言)是否可以通过编程实现。

请原谅使用不良的英语和无意义的代码作为示例。

1 个答案:

答案 0 :(得分:0)

如果要在参数中传递键/值对,请使用一个对象。

new MultiProduct(
    { property: "name", value: "tesla x" },
    { property: "width", value: "280cm" },
    etc
)

new MultiProduct(
    {
        name: "tesla x",
        width: "280cm",
        etc
    } 
)

如果要分配给名称在变量中的属性,请使用方括号表示法:

const atttobedefined1 = /* How you read from the args depends on the specific forfmat */
this[atttobedefined1] = /* etc */

拥有完全自由格式的属性会首先失去使用类的好处,因此您可能需要重新考虑这种方法。只需添加更多可选参数,可能会更好。