“我有理解的问题。我的代码:
//constructor
function Widget (options) {
};
//return the string
Widget.prototype._addEditFormString = function (val) {
return "<input type='text' value='" + val + "' >";
}
//initializing method
Widget.prototype.init = function () {
var addRowButton = document.getElementsByName("addRow")[0];
addRowButton.addEventListener("click", this.addRow, false);
};
//this context in this method still confusing me
Widget.prototype.addRow = function () {
console.log(this._addEditFormString);//Uncaught TypeError: Object #<HTMLInputElement> has no method '_addEditFormString'
}
var wid = new Widget();
wid.init();
问题 - 在init()方法中我添加了事件监听器(addRow方法),但是在addRow方法中我不知道如何捕获我的contructor类的“this”,因为我想调用_addEditFormString()方法,但是接收“未捕获的TypeError:对象[对象窗口]没有方法'_addEditFormString'”。如何在没有Widget.prototype._addEditFormString的情况下解决这个问题?或者说只有一个解决方案?感谢。
答案 0 :(得分:1)
问题是事件处理程序中的上下文是窗口,而不是Widget
。
更改
Widget.prototype.init = function () {
var addRowButton = document.getElementsByName("addRow")[0];
addRowButton.addEventListener("click", this.addRow, false);
};
到
Widget.prototype.init = function () {
var _this = this;
var addRowButton = document.getElementsByName("addRow")[0];
addRowButton.addEventListener("click", function(){_this.addRow()}, false);
};
在评论中修改您的问题:
你好像想要Widget.prototype._addEditFormString.call(this);