gpt4 book ai didi

javascript - 动态添加成员到对象

转载 作者:行者123 更新时间:2023-11-30 07:26:19 25 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
Javascript closure inside loops - simple practical example

我正在尝试做这样的事情:

var obj = function(){
var members = ['a','b','c','d','e'];
for(var i in members){
inst[i] = function(){
console.log(i);
}
}
};

但是当我这样做的时候:

var inst = new obj();
inst.a(); inst.b(); inst.c(); inst.d(); inst.e();

它打印出 e 5 次!此外,我可能能够引用 this 而不是使用我将对象实例化为的名称,但我根本无法让它工作。这背后的逻辑是使用 websockets 生成 API 模板客户端。这是一个粗略的演示,基本上做了相同类型的事情(在逻辑上),但我陷入了这个技术问题,它阻碍了我的进步。

谢谢

编辑

让我给出完整的问题。我不想让每个人都重载,但这些解决方案不起作用......

var SocketClient = function(config){
//platform specific stuff
var self = this;
var count = 0;
var socket = io.connect(config.address+':'+config.port);
var members = [];
socket.on('method',function(data){
console.log(data.name);
KovarApp.client[data.name] = addLogicMember(data.name);
console.log(KovarApp.client[data.name]);
});
var addLogicMember = function(n){
return function(config){
var callback = null;
if(typeof config.callback !== 'undefined'){
var callback = config.callback;
delete config.callback;
}
call({
method: n,
data: config,
callback: callback
});
};
};
var call = function(config){
var c = count++;
var timer = null;
socket.on('reply_'+c,function(data){
if(typeof config.callback === 'function'){
if(timer != null){
timer.clearTimeout();
}
config.callback(data);
timer = setTimeout(function(){
socket.removeAllListeners('reply_'+c)
},10000);
}
});
config.data.handle = c; //make sure that the server has the handle for this function call
socket.emit(config.method,config.data);
};

};

服务器向客户端发出 5 个函数:登录是第一个函数,getpatientinfo 是最后一个函数。在服务器上,我将它设置为 console.log 每个回复。如果我调用任何函数,它会调用 console.log 的 getpatientinfo,因为这是它接收到的字符串,这意味着在客户端上每个函数都引用最后接收到的字符串 (getpatientinfo)。我已经根据一些答案进行了更改,但仍然无法正常工作。套接字在这里不应该成为问题。问题显然是我在生成成员时的前端逻辑,因为每个成员都反射(reflect)了最后添加的成员。

已解决!见下文! (这不是关闭!!!)

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com