javascript错误:对象不是函数

当我在下面运行我的代码时,它显示错误object is not a function控制台中object is not a function 。 此错误出现在此行var todo = new Todo('contents'); 在我的script.js文件中。 我怎样才能使它工作?

这是我的todo.js文件

 var Todo = (function(c) { var contents = $('.' + c); var showel = function (d) { contents.prepend(d); }, add = function (name) { if(name != "") { var div = $('
') .append('' + name + '') .append("") .append(""); } return showel(div); }, addUpdateField = function (dom) { var name = dom.parent().find('span').text(), field = $(''), update = $(''); dom.parent().html('').append(field).append(update); return; }, update = function(el) { var val = el.parent().find('input').val(); el.parent().html('' + val + '') .append('') .append(''); return; }, remove = function (el) { return el.remove(); }; return { add : add, update : update, remove : remove, addUpdateField : addUpdateField }; })();

这是我的script.js文件

 $(function () { var todo = new Todo('contents'); $('.addBtn').on('click', function() { var name = $(this).parent().find('input[type="text"]').val(); todo.add(name); }); $('.contents').on('click', '.remove', function() { var el = $(this).parent(); todo.remove(el); }); $('.contents').on('click', '.update', function() { var dom = $(this); todo.addUpdateField(dom); }); $('.contents').on('click', '.updateBtn', function() { var el = $(this); todo.update(el); }); }); 

这是HTML代码

           

您正在立即执行分配给Todo的function。 该函数返回一个对象,因此Todo引用返回的对象,而不是函数(因此“Not a function”错误)。

我假设你想要的东西是这样的:

 var Todo = function () { this.add = function () { //Note the use of `this` here //Do stuff }; //etc... }; //No self-invoking parentheses here 

现在, Todo引用了一个构造函数,您可以使用new运算符调用它,就像您当前正在尝试的那样。

另请注意,此模式将导致Todo每个实例都具有每个方法的单独副本,这不是非常有效。 将方法声明为prototype属性会更好:

 var Todo = function () { //Initialize the Todo instance }; Todo.prototype.add = function () { //Do stuff }; 

现在, Todo所有实例都将共享这些方法的单个副本。