2017-03-31 65 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),你就会明白发生了什么。

相关问题