次のコードでは、func2b が呼び出されると、'this' は DOMWindow であり、obj2 への参照ではありません。func2b が「this」として obj2 への参照を失っているのはなぜですか?
jsFiddle のバージョンは次のとおりです: http://jsfiddle.net/qqzKh/
var obj1 = {
init: function() {
this.prefix = "Stop!";
obj2.func2a(this.func1a);
}
,func1a: function(message) {
console.log(this.prefix + " " + message);
}
};
var obj2 = {
func2a: function(callback) {
this.callback = callback;
console.log(this.callback); // Correct reference to obj1.func1a
obj3.func3a(this.func2b);
}
,func2b: function(message) {
console.log(this); // Unexpectedly returns DOMWindow
this.callback(message);
}
};
var obj3 = {
func3a: function(callback) {
callback("Hammer Time.");
}
}
obj1.init();
解決
var obj1 = {
init: function() {
this.prefix = "Stop!";
obj2.func2a(this, this.func1a);
}
,func1a: function(message) {
console.log(this.prefix + " " + message);
}
};
var obj2 = {
func2a: function(owner, callback) {
this.owner = owner;
this.callback = callback;
obj3.func3a(this, this.func2b);
}
,func2b: function(message) {
this.callback.call(this.owner, message);
}
};
var obj3 = {
func3a: function(owner, callback) {
callback.call(owner, "Hammer Time.");
}
}
obj1.init();
</p>