Pytam jak zaimplementować funkcję wirtualną w javascript, takich jak C#, powiedzmywirtualnej funkcji w JavaScript
- Mam klasy bazowej
- Mam też klasa pochodna o nazwie B
- Klasa A ma funkcję o nazwie virtualFunction, która ma być funkcją wirtualną, jak w C#, może być nadpisana w pochodnej klasie B
- Funkcja zostanie wywołana do wykonania wewnątrz konstruktora klasy bazowej, A. Jeśli funkcja zostanie nadpisana w B, B zostanie wywołana o termostat A zostanie wywołany:
W tym przykładzie poniżej chcę uzyskać alert "B", a nie "A".
function A() {
this.virtualFunction();
}
A.prototype.virtualFunction = function() {
alert('A');
};
//-------------------------------------
function B() {}
B.prototype = new A();
B.prototype.virtualFunction = function() {
alert('B');
};
var b = new B();
Gdybyśmy wywołać funkcję po instancja, tak, to jest w porządku, ale muszę "wewnątrz konstruktora"
var b = new B();
b.virtualFunction();
W pierwszym przypadku trzeba 'alert („A”)' w obu dominujących i podrzędnych funkcji – MysterX
Nawet w C#, konstruktor klasy base nie ma dostępu do funkcji w klasa pochodna. Podczas gdy podstawowy konstruktor działa, obiekt nie jest jeszcze instancją klasy pochodnej, więc przesłonięcia klasy pochodnej nie zostały jeszcze skonfigurowane. Generalnie nie byłby bezpieczny wywoływanie metod w klasie pochodnej przed uruchomieniem konstruktora pochodnego. – Wyzard
[Nie używaj nowych do tworzenia prototypowych obiektów!] (Https://stackoverflow.com/questions/12592913/what-is-the-reason-to-use-the-new-keyword-tutaj) Zamiast tego umieść super call w 'B', a otrzymasz oczekiwane rezultaty. – Bergi