gpt4 book ai didi

javascript - 如何将字符串 "a,b,c,d..."转换为 a.b(c,d,...);执行

转载 作者:行者123 更新时间:2023-11-30 10:31:32 25 4
gpt4 key购买 nike

我有一个使用 Websockets 的小型多人应用程序。该应用程序由一个游戏和一个聊天对象组成,每个对象都有特定的方法。

基本上,客户端会收到一个格式如下的消息字符串:“object,method,arg1,arg2”,例如“chat,newMsg,foo bar”或“game,addPlayer” ,名称,级别,团队”。第一个例子应该翻译成 chat.newMsg("foo bar"); 而第二个例子应该是 game.addPlayer(name,level,team);我现在在编写消息阅读器时遇到了困难。

我正在尝试找出最优雅的解决方案,例如:

var msgreader = function(message){
msg=message.split(",");
msg[1].apply(msg[0],msg[2]);
}

但是我的消息可能有很多参数,我不太清楚如何处理它。谁能帮帮我?我不会使用 eval() ^^

最佳答案

apply() 需要一个参数数组;如果您想单独传递参数,请使用 call()

但是,apply() 最适合我们(在正确的用例中),因为我们不知道参数的数量。

var msgreader = function (message) {
var props = message.split(",");
var obj = window[props[0]];

obj[props[1]].apply(obj, props.slice(2));
};

apply() 需要范围作为第一个参数,因此我们提供 obj。请参阅 apply() 的文档, slice()split() .

  1. 这将传递 strings namelevelteam 等,而不是值具有这些名称的任何变量。

  2. 如果您希望对其调用方法的对象是全局对象,这将起作用。

    • 如果您希望定位的对象 (a) 不是全局对象,而是另一个对象 (b >),将 window 更改为引用 b

      var msgreader = function (message) {
      var props = message.split(",");
      var obj = b[props[0]];

      obj[props[1]].apply(obj, props.slice(2));
      };
    • 否则,您将必须使您的对象成为全局对象,将其作为属性添加到另一个对象。

关于javascript - 如何将字符串 "a,b,c,d..."转换为 a.b(c,d,...);执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16625223/

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