如何覆盖方法,仍然可以在重写的方法中使用基本方法

时间:2012-09-08 18:07:26

标签: javascript

我有这段代码

function test(){};

test.prototype.testMethod = function(){return 1;}

var t = new test();
t.testMethod();

现在我需要覆盖方法testMethod,这样我仍然可以在覆盖中调用基本方法。 我怎么能用原型做到这一点?

2 个答案:

答案 0 :(得分:1)

如果您需要覆盖单个实例的基本方法,您仍然可以参考原型中定义的方法:

function test(){};

test.prototype.testMethod = function() {console.log('testMethod in prototype');}

var t = new test();
t.testMethod = function () {
    console.log(this);
    console.log('testMethod override');
    test.prototype.testMethod();    
};
t.testMethod();

试一试:http://jsfiddle.net/aeBWS/

如果您想要替换原型方法本身,您有几条路线。最简单的是为您的功能选择一个不同的名称。如果那是不可能的,那么您可以将旧方法复制到一个具有新名称的方法(如_testMethod),然后以这种方式调用它:

function test(){};

test.prototype.testMethod = function() {console.log('testMethod in prototype');}  

test.prototype._oldTestMethod = test.prototype.testMethod;

test.prototype.testMethod = function() {
    console.log('testMethod override');
    test.prototype._oldTestMethod ();    
};

var t = new test();
t.testMethod();

试一试:http://jsfiddle.net/x4txH/

答案 1 :(得分:0)

您可以在测试原型上使用旧方法的引用,如下所示:

function test(){};

test.prototype.testMethod = function(){
  return 1;
}

function test2(){};

test2.prototype = new test();

test2.prototype.testMethod = function(){
  return test.prototype.testMethod()
};