【问题标题】:Javascript class constructor with parameter used as key from object literal [duplicate]Javascript类构造函数,其参数用作对象文字的键[重复]
【发布时间】:2016-08-05 12:27:25
【问题描述】:

标题可能有点混乱,但我有以下问题:

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

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

var a = new Test('type1');

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

【问题讨论】:

  • 你需要使用这个语法:propertyList[typ].property1否则它会在propertyList对象中寻找属性名typ(并且这个属性不存在)

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


【解决方案1】:

你的语法有点不对劲。你不能像这样在你的赋值中使用传入的参数typ,因为代码实际上会在propertyList(如propertyList { typ: })中查找属性typ。要使用传入的参数,请将其括在括号中:

this.property1 = propertyList[typ].property1;

【讨论】:

    猜你喜欢
    • 2012-12-22
    • 2018-05-09
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 2016-07-06
    相关资源
    最近更新 更多