未捕获的TypeError:无法读取未定义的属性'push'

时间:2014-06-30 14:47:46

标签: javascript

我可以在控制台中调用时将项目推送到price数组,但是当我单击按钮时不能...

<input type="text" id = "currentPrice">
<button type="button" id = "calcButton">Show</button>

var Newchart = function () {
    this.prices = []
}
Newchart.prototype.addNewprice = function () {
    var priceValue = +(document.getElementById('currentPrice').value);
    this.prices.push(priceValue);
    console.log('hello')
}
var c = new Newchart();
var el = document.getElementById("calcButton");
el.addEventListener("click", c.addNewprice, false);

2 个答案:

答案 0 :(得分:1)

这是因为回调调用中的上下文为window,而不是您的Newchart实例。

解决方案是使用bind

el.addEventListener("click", c.addNewprice.bind(c), false);

MDN有关于此问题的文档:The value of this within the handler

答案 1 :(得分:0)

this变量

的问题
el.addEventListener("click", c.addNewprice, false);

编辑 - 由@dystroy建议

在您的情况下this指向window而不是classfunction