オブジェクトがあります。o
とし、o
という参照をします。どうすればobject == this、しかしobject.member!= this.member in Javascript?
o
の範囲内でメンバーを設定し、m
としましょう。
ので、Oで、私は呼ん:Oの外
o.m = "blah"
、私はm
にアクセス:
console.log(o.m)
。私はした:
console.log(this == this.parent.o)
これは本当を返します。これはどのように可能ですか?
this.m = "blah"
console.log(this.m) // prints "blah"
が、その範囲を出た後にして実行します:
console.log(o.m)
私は
EDIT
はまた、私はオブジェクトo
以内に試してみたクローム17.0.963.56 mを使用しています
別のものをプリントします。
関連するコード(this.addEventを参照してください( "playPauseButtonClicked")):あなたがo
の中にいる、とあなたはm
を設定したい場合は
// 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<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);
}
...
}
コンソールを必要と
this.p
を、リアルタイムではありません。今のところ、 'var a = {a: 'h'}、b = {a: 'h'}; console.log(a.a == b.a); 'は私に真実を返します。 – Christian
変数を初期化する必要があります。 'var o =新しいobj; console.log(o.m); ' – Relic