我在点击时创建了一个自定义对象,然后尝试访问它的原型方法。
$(function(){
$('.addtask').on("click", function(){
var new_task = new Task();
$('.deletetask').on("click", function(){
new_task.deleteTask();
});
function Task(){
this.html="<li>Add Description<span class='deletetask'></span></li>";
}
Task.prototype = {
constructor: Task,
deleteTask: function(){
this.remove()
},
}
});
});
现在,当我点击类deleteTask时,它说:
TypeError: new_task.deleteTask is not a function
new_task.deleteTask();
如何访问原型方法deleteTask()??
答案 0 :(得分:3)
您在创建Task
之后设置了new Task
的原型。您不是通过这样做来更改已创建实例的原型,因为在创建实例时会引用原型。
移动Task.prototype = {
分配,然后创建new Task
。
如果您真的想在创建后为所有实例添加一个函数,请更改构造函数的原型而不是替换它:
Task.prototype.deleteTask = function(){...
答案 1 :(得分:1)
您应该在初始Task
调用之前移动prototype
及其.on
方法的定义。这将偶然解决@dystroy所识别的问题,即您在创建实例后尝试设置Task
的原型。
如上所述,每次调用单击处理程序时都会重新创建Task
函数,因此每次单击时创建的Task
对象将是不同类的实例,使用prototype
没有实际意义。原型方法是在多个实例之间共享方法和实现继承的有效方法,但是你没有使用它们。
或者,将Task
函数保留在原来的位置,但放弃使用prototype
方法,例如:
function Task() {
this.html = "<li>Add Description<span class='deletetask'></span></li>";
this.removeTask = function() {
this.remove();
}
}
(注意:this.remove
此时也未定义?)