Quindi questa è una domanda scomoda da chiedere, ma sto imparando NodeJS e ho una domanda. In Java quando chiamo un metodo da un oggetto, l'istanza this
rimane la stessa (come in questo esempio).nodejs - Quale "questo" è questo?
private Test inst;
public Test() {
inst = this;
this.myFunction();
}
private void myFunction() {
System.out.println(inst == this);
}
Questo restituisce vero (in teoria, questo è il codice dalla cima della mia testa). Tuttavia, in NodeJS quando tento di fare qualcosa di simile fallisce.
var MyObject = function() {
this.other = new OtherObject();
this.other.on("error", this.onError);
console.log(this); //This returns the MyObject object
}
MyObject.prototype.onError = function (e) {
console.log(this); //This returns the OtherObject object, where I thought it would return the MyObject object.
}
La mia domanda è perché è così, e se questo è stato fatto in modo non corretto da parte mia, come posso correttamente riferimento altre variabili nell'istanza MyObject dal metodo onError?
per quanto ne so, 'this' in JavaScript è molto difficile. In caso di chiamata in funzione, punta al chiamante, non all'oggetto in cui è definita la funzione. – walther
@ walther- * questo * in javascript non è affatto complicato. È impostato dalla chiamata o dall'uso di * bind *, il gioco è fatto. Anche se è diverso dalle altre lingue, non è molto difficile da capire. – RobG
@RobG, questa è proprio la parte difficile: altri linguaggi lo fanno in modo diverso e confonde l'inferno di alcuni sviluppatori. Se fosse davvero chiaro, una domanda come questa non si presenterebbe mai (e questo non è il primo, né l'ultima volta). – walther