Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未调用原型方法_Javascript_Jquery_Oop - Fatal编程技术网

Javascript 未调用原型方法

Javascript 未调用原型方法,javascript,jquery,oop,Javascript,Jquery,Oop,我正在单击创建一个自定义对象,然后尝试访问它的原型方法 $(function(){ $('.addtask').on("click", function(){ var new_task = new Task(); $('.deletetask').on("click", function(){ new_task.deleteTask(); }); function Task(){

我正在单击创建一个自定义对象,然后尝试访问它的原型方法

$(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()
            },
        }

    });     
});

如何访问prototype方法deleteTask()?

在创建
新任务后,您正在设置
任务的prototype
。这样做不会更改已创建实例的原型,因为原型在实例创建时被引用

Task.prototype={
assignment移动到创建
新任务之前

如果确实希望在创建所有实例后向其添加函数,请更改构造函数的原型,而不是替换它:

Task.prototype.deleteTask = function(){...

在创建
新任务后,您正在设置
任务的原型。这样做不会更改已创建实例的原型,因为原型在实例创建时被引用

Task.prototype={
assignment移动到创建
新任务之前

如果确实希望在创建所有实例后向其添加函数,请更改构造函数的原型,而不是替换它:

Task.prototype.deleteTask = function(){...

调用时,您应该将
任务
的定义及其
原型
方法移动到初始的
之前。这将顺便解决@dystroy发现的问题,即您在创建
任务
的实例后试图设置其原型

如前所述,
Task
函数在每次调用click处理程序时都会重新创建,因此每次单击时创建的
Task
对象将是不同类的实例,这使得使用
prototype
变得毫无意义。prototype方法是在多个实例之间共享方法的有效方法,并且继承,但你两个都没有用

或者,将
任务
功能保留在原来的位置,但使用
原型
方法放弃,例如:

function Task() {        
    this.html = "<li>Add Description<span class='deletetask'></span></li>";

    this.removeTask = function() {
        this.remove();
    }
}
函数任务(){
this.html=“
  • 添加说明”
  • ”; this.removeTask=函数(){ 这个。删除(); } }

    (注意:
    this.remove
    此时也未定义?)

    您应该将
    任务
    及其
    原型
    方法的定义移到初始
    调用之前。
    调用时,这将顺便解决@dystroy发现的问题,您在创建
    任务
    的实例后尝试设置其原型

    如前所述,
    Task
    函数在每次调用click处理程序时都会重新创建,因此每次单击时创建的
    Task
    对象将是不同类的实例,这使得使用
    prototype
    变得毫无意义。prototype方法是在多个实例之间共享方法的有效方法,并且继承,但你两个都没有用

    或者,将
    任务
    功能保留在原来的位置,但使用
    原型
    方法放弃,例如:

    function Task() {        
        this.html = "<li>Add Description<span class='deletetask'></span></li>";
    
        this.removeTask = function() {
            this.remove();
        }
    }
    
    函数任务(){
    this.html=“
  • 添加说明”
  • ”; this.removeTask=函数(){ 这个。删除(); } }
    (注意:
    this.remove
    此时也未定义?)