Mam ten kod (JSFiddle)Jak poprawnie zakreślić tę "publiczną" metodę?
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();
To jest abstrakcją prawdziwego problemu mam.
Tak więc oczekiwałbym połączenia z OBJ.thePrivateVarTimeout()
, aby czekać 10
, a następnie alert
z 23 (które chcę, aby uzyskać dostęp za pośrednictwem innych narażonych metoda).
Jednak ustawienie self
nie wydaje się być prawidłowe. Kiedy ustawiam self = this
, wydaje się, że this
nie jest odniesieniem do funkcji, ale odniesieniem do obiektu globalnego. Dlaczego to?
Jak udostępnić publiczną metodę thePrivateVarTimeout
zadzwonić pod inną publiczną metodę thePrivateVarTimeout
zadzwonić do innej publicznej metody ?
* Dlaczego jest to? * Bo jesteś wywołanie funkcji normalnie ('func()'). W tym przypadku "this" zawsze odnosi się do obiektu globalnego. Jeśli chcesz, aby odwoływał się do pustego obiektu, wywołaj go za pomocą 'new' lub przypisz jeden:' var self = {}; '. –
@FelixKling Dzięki temu 'self' ustawiony jest poprawnie. Nadal nie mogę go użyć do wywołania 'thePrivateVar' chociaż. Myślę, że odpowiedź Raynosa jest taka, jak powinienem to zrobić. –