Note that there are some explanatory texts on larger screens.

plurals
  1. POHow can object == this, but object.member != this.member in Javascript?
    primarykey
    data
    text
    <p>I have an object, let's call it <code>o</code>, and a reference to <code>o</code>.</p> <p>Within the scope of <code>o</code>, I set a member, let's call it <code>m</code>.</p> <p>So in o, I call:</p> <pre><code>o.m = "blah" </code></pre> <p>Outside of o, I access <code>m</code>:</p> <pre><code>console.log(o.m) </code></pre> <p>Which gives me something that isn't "blah". I did:</p> <pre><code>console.log(this == this.parent.o) </code></pre> <p>which returns true. How is this possible? I'm using Chrome 17.0.963.56 m</p> <p><strong>EDIT</strong></p> <p>Also, I've tried within object <code>o</code>:</p> <pre><code>this.m = "blah" console.log(this.m) // prints "blah" </code></pre> <p>but after exiting that scope and do:</p> <pre><code>console.log(o.m) </code></pre> <p>it prints something different.</p> <p>Relevant code (see this.addEvent("playPauseButtonClicked")):</p> <pre><code> // Controller code (singleton) function controller() { if (window.c) { return window.c; } window.c = this; ... // Event handling this.addEvent = function(eventName, callback) { if (!this.events[eventName]) this.events[eventName] = []; this.events[eventName].push(callback); } this.raiseEvent = function(eventName) { self = getController(); if (self.events[eventName]) { var callbacks = self.events[eventName]; var i = 0; for (i = 0; i&lt;callbacks.length; ++i) { callbacks[i](); } } } this.musicplayer = new zeitgeistPlayer(this, this.songStatus); ... this.addEvent("playPauseButtonClicked", function() { var controller = getController(); var musicplayer = controller.musicplayer; switch (musicplayer.state) { case "paused": musicplayer.resume(); controller.view.setButtonProperty("playPauseButton", "pause", true); break; case "playing": musicplayer.pause(); controller.view.setButtonProperty("playPauseButton", "pause", false); break; case "stopped": controller.playSong(); controller.view.setButtonProperty("playPauseButton", "pause", true); break; } }); if (this.playQueue.length == 0) this.view.setButtonProperty("playPauseButton", "disabled", true); this.raiseEvent("controllerLoaded"); } // Functional classes function basePlayer(songStatus) { this.state = "stopped"; // states are: stopped, playing, paused ... } // implementation of basePlayer using the zeitgeist flash player function zeitgeistPlayer(controller, songStatus) { $.extend(this, new basePlayer(songStatus)); ... this.controller = controller; ... this.pause = function () { if (this.controller.debug) console.log("player pausing"); this.state = "paused"; this.swf.pauseSong(); if (this.controller.debug) console.log("player "+this.state); console.log(this); console.log(getController().musicplayer); console.log(this==getController().musicplayer); } ... } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload