2017-03-31 25 views
0

我正在與ES6第一次合作,並且閱讀了一些關於地圖的內容。據我所知,這應該ES6的可能性內很好:無法讀取已定義地圖的未定義屬性「集合」

export class Elements { 

    constructor() { 
     this.elements = new Map(); 
     this.attachListeners(); 
    } 

    textElement() { 
     this.elements.set((elements.length + 1), new TextElement()); 
    } 

    attachListeners() { 
     document.getElementById('addText').addEventListener('click', this.textElement); 
    } 
} 

然而,當我點擊addText元素,我得到了我的控制檯

Uncaught TypeError: Cannot read property 'set' of undefined at HTMLDivElement.textElement

我試着換以下MapSet,ArrayObject,但是,同樣的錯誤不斷進入我的控制檯。

這怎麼可能是這樣一個簡單的操作不起作用?

+0

請參閱*常見問題:在副本中使用對象方法作爲回調/事件處理程序*。 –

回答

1

你需要綁定你的聽衆,就像這樣:

document.getElementById('addText').addEventListener('click', this.textElement.bind(this)); 

否則,this指的是你的 'addText' 元素在你的textElement功能。

嘗試在textElementconsole.log(this)有和沒有.bind(this),你就會明白髮生了什麼。

相關問題