Javascript类构造函数,参数用作对象文字的键

时间:2016-08-05 12:27:26

标签: javascript class constructor ecmascript-6 object-literal

标题可能有点令人困惑,但我有以下问题:

var propertyList = {
    type1: {property1: 1},
    type2: {property1: 2}
}

class Test {
    constructor(typ){
        this.property1 = propertyList.typ.property1;
    }
}

var a = new Test('type1');

代码非常明显 - 我想设置property1对象的a属性,而不是在构造函数中手动传递值,而是从propertyList对象文字中选择一个值将其中一个键传递给构造函数。我希望当我运行上面的代码时,将创建对象a,并将property1值设置为1.但是我没有得到Uncaught TypeError: Cannot read property 'property1' of undefined错误。当我在构造函数的第一行中调用console.log(typ)时,它正确地显示传递给构造函数的值是type1。为什么上面的代码不起作用,可以以某种方式修复它?

1 个答案:

答案 0 :(得分:0)

你的语法有点偏。你不能在你的作业中使用传递的参数typ,因为代码实际上会在typ中寻找属性propertyList(如propertyList { typ: })。要使用传入的参数,请将其包装在括号中:

this.property1 = propertyList[typ].property1;