所以我有这个对象,我想知道在声明时我如何引用其他属性:
var Chatter = function(io){
this.base_url = "http://chat.chatter.com:1337";
this.debug_on = true;
this.socket = io.connect(this.base_url);
this.socket.on('acknowledge', this.acknowledge);
}
Chatter.prototype.debug = function(msg){
if(this.debug_on){
var m = {timestamp:Date.create().format('{yyyy}-{MM}-{dd} {24hr}:{mm}:{ss}{tt}'), message:msg};
console.debug('#[ chatter DEBUG ]# - {timestamp} - {message}'.assign(m));
}
}
Chatter.prototype.acknowledge = function(data){
this.debug('Acknowledgement received!'); //This throws an error, claims #debug is not there
this.uuid = data.uuid;
};
呼叫this.debug()
失败,但在第5行,呼叫this.acknowledge
有效。有人能告诉我我做错了吗?
答案 0 :(得分:2)
问题不在于Chatter.prototype.acknowledge
(请参阅http://jsfiddle.net/aEdvh/)
这就是你打电话的方式。
this.socket.on('acknowledge', this.acknowledge);
在套接字回调中调用值为acknowledge
的{{1}}(请参阅this guide)。
您需要将this
的值绑定到上下文。尝试使用.bind
:
this
如果您需要支持IE8等旧版浏览器,或者您不喜欢bind,可以手动执行此操作
this.socket.on('acknowledge', this.acknowledge.bind(this));