对象在javascript中没有方法错误

时间:2013-07-15 12:40:27

标签: javascript jquery javascript-events

我正在使用以下代码,但它返回以下错误

 Uncaught TypeError: Object [object HTMLAnchorElement] has no method 'userInput'

以下是代码jsfiddle

var ClickEvent = function (event) {
    this.ev = $('.' + event);
    this.ev.on('click', function () { this.userInput(); });
};

ClickEvent.prototype = function () {
    return {
        userInput: function () {
            console.log('user');
        },

        show: function () {
            console.log('show');
        }
    };   
}();

var c = new ClickEvent('event');

我在userInput回调函数中调用on()函数,但它返回error以上。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:5)

问题是点击回调处理程序中的执行上下文(this)没有指向ClickEvent实例,它正在引用被点击的dom元素。

您需要使用

this.ev.on('click', $.proxy(function () { this.userInput(); }, this));

演示:Fiddle

var that = this;
this.ev.on('click', function () { that.userInput(); });

演示:Fiddle

答案 1 :(得分:2)

this.userInput()嵌套在回调函数中,因此在其中作用域。您可以将您需要的this实例外部化,如下所示:

var ClickEvent = function (event) {
    var $this = this;
    $this.ev = $('.' + event);
    $this.ev.on('click', function () { $this.userInput(); });
};

答案 2 :(得分:0)

"this"函数中的onclick引用了"this.ev"

"$('.' + event);" 

不是"userInput""show"的对象。