Ho questo codice (JSFiddle)Come posso adattare correttamente questo metodo "pubblico"?
var OBJ = function(){
var privateVar = 23;
var self = this;
return {
thePrivateVar : function() {
return privateVar;
},
thePrivateVarTimeout : function() {
setTimeout(function() { alert(self.thePrivateVar()); } , 10);
}
}
}();
alert(OBJ.thePrivateVar());
OBJ.thePrivateVarTimeout();
Questa è un'astrazione di un vero problema che sto avendo.
Così - mi si aspetterebbe la chiamata a OBJ.thePrivateVarTimeout()
aspettare 10
e poi alert
con 23 (che voglio che l'accesso attraverso l'altro metodo esposto).
Tuttavia, l'impostazione self
non sembra essere impostata correttamente. Quando sto impostando self = this
sembra che this
non sia un riferimento alla funzione ma un riferimento all'oggetto globale. Perchè è questo?
Come è possibile impostare il metodo pubblico thePrivateVarTimeout
l'altro metodo pubblico thePrivateVar
?
* Perché è questo? * Poiché si sta chiamando la funzione normalmente ('func()'). In questo caso, 'this' fa sempre riferimento all'oggetto globale. Se vuoi che si riferisca ad un oggetto vuoto, chiamalo con 'new' o assegnane uno:' var self = {}; '. –
@FelixKling Grazie rende "self" impostato correttamente. Non riesco ancora a usarlo per invocare 'thePrivateVar'. Penso che la risposta di Raynos sia il modo in cui dovrei farlo. –