po prostu odpowiedzieć na pytanie, YES, thisUsefulThing mogą uzyskać dostęp thatUsefulThing
Ale jak Twój kod aktualnie pracuje 'to' jest nie w rzeczywistości globalny, jest odniesieniem do czegoś Użyteczne dla wszystkich bezpośrednich potomków.
Kiedy pracuję z dosłownych obiektów, zwykle odwoływać się do nich po imieniu, a nie z „tego”, tak w przypadku chciałbym zastąpić 'this.thatUsefulThing()() z somethingUseful.thatUsefulThing
Dlaczego ? Ponieważ i tak działa na całym świecie!
EDIT:
Jak plalx podkreślił w swoim komentarzu do mojej odpowiedzi, najlepsze praktyki w zakresie realizacji tej klasy (z członem klasy przykład) użyłby funkcjonalnych klas/prototypy i wyglądać tak:
function SomethingUseful() {
this.member = 'I am a member';
}
SomethingUseful.prototype.thisUsefulThing = function() {
this.thatUsefulThing();
}
SomethingUseful.prototype.thatUsefulThing = function() {
console.log('I am useful, and ' + this.member);
}
usefulObject = new SomethingUseful();
usefulObject.thisUsefulThing(); // logs fine with access to this.member
setInterval(usefulObject.thisUsefulThing.bind(usefulObject), 1000); // has access to this.member through bind()
Co to znaczy "zakres globalny" a "zakres przedmiotu"? Twój kod, jak napisano, działa. – user2736012
Należy pamiętać, że po wywołaniu 'object.method()', wartość 'this' w' method' staje się odniesieniem do 'object'. Nie ma znaczenia, gdzie i kiedy obiekt i metoda zostały stworzone. Liczy się tylko to, jak * nazywasz metodę. Umieść tę samą metodę na innym obiekcie, wywołaj ją z tego obiektu, a wartość "this" odniesie się do nowego obiektu. 'var o = {thatUsefulThing: function() {console.log (" Ja też jestem użyteczny! ");}}; o.foo = somethingUseful.thisUsefulThing; o.foo(); // Ja też jestem przydatna " – user2736012
Tam edytowałem go tak, aby bezpośrednio odzwierciedlał błąd, który napotykam w pigułce. – Synthead