调用父原型方法

Invoke parent prototype method

本文关键字:方法 原型 调用      更新时间:2023-09-26

"我在理解方面有问题。我的一段代码:

       //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方法中,我不知道如何捕获我的构造函数类的"this",因为我想调用_addEditFormString()方法,但收到"未捕获的TypeError: Object [Object Window]没有方法'_addEditFormString'"。我怎么能解决没有Widget.prototype._addEditFormString?还是只有一个解?谢谢。

问题是事件处理程序中的上下文是窗口,而不是您的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);