如何通过函数获取变量名并将其作为字符串使用?
直接获取传入变量的原变量名不可行
首先明确:原生JavaScript(包括jQuery)没办法直接在函数内部获取到外部传入变量的原变量名。
当你调用myFunction(foo)时,传递给函数的是foo变量存储的值,函数参数oof只是接收这个值的副本,和原变量foo的名称没有任何关联——函数根本不知道这个值是来自叫foo的变量,还是直接写的字面量"Hello World!"。
针对你棋子场景的替代方案
你的核心需求是把类似e4这样的位置变量名拆分出列(e)和行(4),传递给棋子类。这里给你几个实用的替代方案:
方案1:传递包含位置信息的对象(最推荐)
把变量名作为对象的键,变量值作为对应的值传递,这样函数里就能拿到键名(也就是你要的位置字符串):
// 假设你的棋子类 class ChessPiece { constructor(col, row) { this.col = col; this.row = row; console.log(`棋子定位:列${col},行${row}`); } } // 你的位置变量 const e4 = "皇后"; const a1 = "车"; // 处理函数 function addPiece(positionObj) { // 获取位置字符串(原变量名) const positionStr = Object.keys(positionObj)[0]; // 拆分列和行 const col = positionStr[0]; const row = positionStr.slice(1); // 创建棋子实例 new ChessPiece(col, row); } // 调用方式(ES6可简写为{ e4 }) addPiece({ e4: e4 }); addPiece({ a1: a1 });
方案2:直接传递位置字符串和变量值
如果不需要隐藏位置信息,也可以直接把位置字符串和变量值一起传,写法更直白:
function addPiece(positionStr, pieceValue) { const col = positionStr[0]; const row = positionStr.slice(1); new ChessPiece(col, row); } // 调用方式 addPiece("e4", e4); addPiece("a1", a1);
方案3:直接传递拆分后的参数(最简洁)
如果在调用前就明确列和行信息,直接传拆分后的值是最直接的:
// 直接创建棋子实例 new ChessPiece("e", "4"); new ChessPiece("a", "1");
这个方案省去了中间函数的处理,适合逻辑简单的场景。
内容的提问来源于stack exchange,提问作者Newbie_Coder
相关产品推荐
相关产品推荐

