Вызов метода с использованием прототипа JavaScript - PullRequest
125 голосов
/ 18 февраля 2009

Можно ли вызвать базовый метод из метода-прототипа в JavaScript, если он был переопределен?

MyClass = function(name){
    this.name = name;
    this.do = function() {
        //do somthing 
    }
};

MyClass.prototype.do = function() {  
    if (this.name === 'something') {
        //do something new
    } else {
        //CALL BASE METHOD
    }
};

Ответы [ 14 ]

1 голос
/ 26 февраля 2015

Если вы знаете свой суперкласс по имени, вы можете сделать что-то вроде этого:

function Base() {
}

Base.prototype.foo = function() {
  console.log('called foo in Base');
}

function Sub() {
}

Sub.prototype = new Base();

Sub.prototype.foo = function() {
  console.log('called foo in Sub');
  Base.prototype.foo.call(this);
}

var base = new Base();
base.foo();

var sub = new Sub();
sub.foo();

Это напечатает

called foo in Base
called foo in Sub
called foo in Base

как и ожидалось.

0 голосов
/ 25 мая 2015
function MyClass() {}

MyClass.prototype.myMethod = function() {
  alert( "doing original");
};
MyClass.prototype.myMethod_original = MyClass.prototype.myMethod;
MyClass.prototype.myMethod = function() {
  MyClass.prototype.myMethod_original.call( this );
  alert( "doing override");
};

myObj = new MyClass();
myObj.myMethod();
0 голосов
/ 26 марта 2015

Кроме того, если вы хотите переопределить все экземпляры , а не только этот особый экземпляр, этот может помочь.

function MyClass() {}

MyClass.prototype.myMethod = function() {
  alert( "doing original");
};
MyClass.prototype.myMethod_original = MyClass.prototype.myMethod;
MyClass.prototype.myMethod = function() {
  MyClass.prototype.myMethod_original.call( this );
  alert( "doing override");
};

myObj = new MyClass();
myObj.myMethod();

результат:

doing original
doing override
0 голосов
/ 18 февраля 2009

Нет, вам нужно присвоить функции do в конструкторе и функции do в прототипе разные имена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...