2015-09-04 53 views
0

動態添加關鍵我想動態添加一個關鍵的OBJ,但我不斷收到「未定義無法設置屬性」 錯誤,但知道他們之前,我不能decalre這些屬性。我希望它們動態地添加爲該對象的關鍵字。不能在JavaScript對象

var dict = {} 
objectarray.forEach((item: Obj) => { 
     this.dict[item.ID] = "xyz"; 
    }); 

作爲每How do I add a property to a Javascript Object using a variable as the name?似乎有可能僅通過使用物鏡[名稱] =值來添加屬性動態對象。

我錯過了什麼嗎?任何幫助?

+0

的問題不在於你不能設置像這樣的財產,問題是,你正在試圖建立的「不確定」的屬性。 this.dict沒有定義 –

回答

4

刪除thisthis.dict,你應該是金!

var dict = {} 
objectarray.forEach((item: Obj) => { 
    dict[item.ID] = "xyz"; 
}); 

沒有看到更多的代碼,這是很難說有什麼this意味着在這方面,但最有可能是window對象,所以你的意思基本上是window.dict[item.ID] = "xyz"。由於窗戶上沒有dict屬性,它會像那樣炸燬。

+0

酷我沒有明白......謝謝。 –

0

@奧斯卡的回答是正確的。

這是一個更詳細的代碼示例;

enum memberTypes 
{ 
    None, 
    Property, 
    Method 
} 

class memberInfo { 
    memberName: string; 
    memberType: memberTypes; 
    constructor(name: string, mtype: memberTypes) 
    { 
     this.memberName = name; 
     this.memberType = mtype; 
    } 
    toString() { 
     return JSON.stringify(this); 
    } 
} 

class propertyInfo extends memberInfo 
{ 
    constructor(name: string) 
    {  
     super(name, memberTypes.Property); 
    } 
} 

class methodInfo extends memberInfo 
{ 
    constructor(name: string) 
    {  
     super(name, memberTypes.Method); 
    } 
} 

var dict = new Object(); 
var objectArray = new Array<memberInfo>(); 

objectArray.push(new propertyInfo("Name"), new methodInfo("toString")); 

objectArray.forEach((item) => { 
    if (item.memberType === memberTypes.Property) 
    { 
     if (item.memberName === "Name") { 
      dict[item.memberName] = 'SysName'; 
     }  
    } else if (item.memberType === memberTypes.Method) { 

     if (item.memberName === "toString") { 
      dict[item.memberName] = function() { return JSON.stringify(this); }; 
     } 
    } 
    console.log(item.toString()); 
}) 

console.log(dict); 

TypeScript Playground Example

+0

更新,我最初宣佈'dict'是一個'Array ',考慮到這裏的整體意圖,這是非常不恰當的...... –