einfach Um Ihre Frage zu beantworten, YES, thisUsefulThing CAN thatUsefulThing Zugriff
Aber wie Ihr Code zur Zeit läuft, 'this' ist nicht wirklich global, es ist ein Verweis auf etwas, das für alle direkten Nachkommen selbst nützlich ist.
Wenn ich mit wörtlichen Objekte arbeite, ich sie in der Regel nach Namen verweisen, anstatt mit ‚this‘, so in Ihrem Fall würde ich ‚this.thatUsefulThing()‘ mit somethingUseful.thatUsefulThing replace()
Warum ? Weil es sowieso global funktioniert!
EDIT:
Als plalx auf meine Antwort in seinem Kommentar darauf hingewiesen, Best Practices diese Klasse für die Implementierung (mit einem Beispiel Klassenmitglied) würde funktionelle Klassen/Prototypen verwenden und wie folgt aussehen:
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()
Was meinen Sie "Geltungsbereich des globalen" vs "Umfang des Objekts"? Ihr Code funktioniert wie geschrieben. – user2736012
Bedenke nur, dass wenn du 'object.method()' benutzt, der Wert von 'this' in' method' eine Referenz auf 'object' wird. Es spielt keine Rolle, wo und wann das Objekt und die Methode erstellt wurden. Alles, was zählt, ist * wie * du die Methode nennst. Setzen Sie dieselbe Methode auf ein anderes Objekt, rufen Sie sie von diesem Objekt ab, und der Wert von this bezieht sich auf das neue Objekt. 'var o = {thatUsefulThing: function() {console.log (" Ich bin auch nützlich! ");}}; o.foo = somethingUseful.thisUsefulThing; o.foo(); // Ich bin auch nützlich. – user2736012
Dort habe ich es bearbeitet, um den Fehler, dem ich gerade begegne, direkt wiederzugeben. – Synthead