Javascript私有变量param更新

时间:2015-09-25 14:06:04

标签: javascript

问题的简历:如何在内部保存函数调用的参数,以便在下次调用时使用

我知道我的问题并不复杂,但我在这里有点困惑。 这是问题所在:

Updateorderbook是一个连接到websocket,订阅频道的功能。此功能需要在连接到新通道之前第二次(或更多次)调用当前通道时取消订阅。 要取消订阅,我需要“previousparams”,所以我尝试做的就是将这些params存入this.currentParams,但显然它不起作用。

要恢复我的问题,我需要在内部保存呼叫的参数,以便我可以在下次呼叫时访问它。

updateOrderbook: function(params) {
    var self = this;
    var ws = OrderbookSocket.getInstance();

    if(ws.readyState === 1) {
        var request = OrderbookRequest.request(this.currentParams, 'unsubscribe');
        ws.send(request);
        // this.currentParams = params;
    }

    ws.onopen = function(e) {
        var request = OrderbookRequest.request(params,'subscribe');
        self.currentParams = params;

        ws.send(request);
    }
    ws.onclose = function(e) {
        console.log(" WS has been closed: ",e);
    }

    ws.onmessage = function(e) {
    }
}

我不喜欢的是这个.currentParams会自动更新,即使ws.onopen没有被调用! (这就像是绑定的,有些东西我没有到达这里)。

1 个答案:

答案 0 :(得分:1)

问题是变量是由值和对象通过引用传递的,所以你需要使用_.clone()下划线函数克隆你的对象,例如

如果这是您想要的唯一的东西,您只需将代码更改为:

var gl_params;
updateOrderbook: function(params) {
    // gl_params still your old params
    // params are your new params
    var self = this;
    var ws = OrderbookSocket.getInstance();
    if(ws.readyState === 1) {
        var request = OrderbookRequest.request(gl_params, 'unsubscribe');
        ws.send(request);
    }
    ws.onopen = function(e) {
        var request = OrderbookRequest.request(params,'subscribe');
        gl_params = _.clone(params); 
        ws.send(request);
    }
    ws.onclose = function(e) {
        console.log(" WS has been closed: ",e);
    }
    ws.onmessage = function(e) {
    }
}