在声明期间引用对象属性?

时间:2013-05-21 20:56:38

标签: javascript javascript-objects

所以我有这个对象,我想知道在声明时我如何引用其他属性:

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有效。有人能告诉我我做错了吗?

1 个答案:

答案 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));