创建新的对象实例后,js代码显示错误

时间:2013-07-15 10:33:15

标签: javascript

当我创建Click事件对象的新实例时,它返回以下错误。 Click here用于jsfiddle代码。以下是我的代码

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

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

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

var c = new ClickEvent('event');
    c.show();

为什么会显示此错误,我该如何解决?

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

4 个答案:

答案 0 :(得分:3)

有几个问题。

  1. 您在prototype中有拼写错误。

  2. this.ev.on('click', this.userInput());应为this.ev.on('click', this.userInput); - 您希望传递对函数的引用,以便在用户单击时执行,您不希望在绑定事件处理程序时调用它。

答案 1 :(得分:2)

你拼写错误prototype; your code otherwise executes fine,虽然您打算使用this.userInput引用该方法,而不是立即使用this.userInput()调用该方法,因此您会收到'show'和{{1}的消息当页面加载时。

有了这些修补程序,您的代码functions as I expect you intend'user'仅在您点击链接时显示。

答案 2 :(得分:0)

错误意味着在javascript库中没有位置,可以找到方法userInput。由于你没有在第3行之前的任何地方引用userInput变量,因此我很有可能告诉你。另外.on()有两个参数:(“EVENT”,“FUNCTION”)。在您的代码中,this.userInput不是一个函数,不能作为一个函数。

答案 3 :(得分:-1)

固定类型,稍有改动,这可行。

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

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

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

var c = new ClickEvent('event');
c.show();