在javascript中如何在另一个原型方法中调用一个原型方法?

时间:2012-03-17 12:25:08

标签: javascript call prototype

假设我有一个功能:

function test(){}

test.prototype.method01=function(){
    //do something
}

test.prototype.method02=function(){
    //how can I call the method01?
    //this.method01()...?
    //but the chrome through an error:
    //Uncaught TypeError: Object #<HTMLImageElement> has no method 'method01'
}

编辑: 事实上,method01是这样的:

test.prototype.method02=function(){
    $('.cpy').resizable({

    }).draggable({
        start:function(e,ui){
            this.method01();
        }
    });
}

3 个答案:

答案 0 :(得分:13)

test.prototype.method02=function(){
    var testThing = this;
    $('.cpy').resizable({

    }).draggable({
        start:function(e,ui){
            testThing.method01();
        }
    });
}

您必须在另一个局部变量中保留this引用,以便回调函数在调用其他方法时可以使用它。 this引用绑定在每个函数调用上,包括调用回调函数,例如您在“.draggable()”设置中使用的函数。当名为this的内容设置为与“method02”函数中的this不同时。

答案 1 :(得分:2)

是的,你可以在词法范围内手动缓存this,就像这个问题中提出的其他答案一样。但是,我建议的替代方法是使用$.proxyfunction.bind作为回调来创建绑定方法。

始终使用稳定的this调用绑定方法。我发现它们比更高范围内this的奇怪命名引用更具可读性

答案 2 :(得分:0)

关于什么

test.prototype.method02=function(){
     this.method01.apply(this);
     // do some other stuff
}