sto chiedendo come implementare la funzione virtuale nella javascript come C#, diciamofunzione virtuale in Javascript
- Ho una classe base A
- Ho anche una classe derivata denominata B
- La classe A ha una funzione chiamata virtualFunction, questa dovrebbe essere una funzione virtuale come in C#, questa può essere sovrascritta nella classe derivata B
- La funzione verrà chiamata per eseguire all'interno del costruttore della classe base, A. Se la funzione è sovrascritta in B, quella di B sarà invocata o ne verrà invocato uno A
Con questo esempio di seguito, voglio ottenere un avviso "B", non l''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();
Se invochiamo la funzione dopo istanziato, in questo modo, allora va bene, ma ho bisogno "all'interno del costruttore"
var b = new B();
b.virtualFunction();
Nel primo caso si ha 'alert ('A')' in entrambi padre e figlio funzioni – MysterX
Anche in C#, un costruttore della classe base non ha accesso alle funzioni una classe derivata. Mentre il costruttore base è in esecuzione, l'oggetto non è ancora un'istanza della classe derivata, quindi il paradiso di override della classe derivata non è ancora stato impostato. In generale, non dovrebbe essere comunque sicuro chiamare i metodi nella classe derivata prima dell'esecuzione del costruttore derivato. – Wyzard
[Non usare nuovo per creare oggetti prototipo!] (Https://stackoverflow.com/questions/12592913/quello-è-la-spiega-per-utilizzare-la-new-keyword-here) Invece, metti un super chiamata in 'B', e otterrai i risultati attesi. – Bergi