假设我们有一个对象
export const hello = {
a: 1,
b: 2
}
我们导入它,得到一个函数
import { hello } from ...
function printVarName(x) {
...
}
printVarName(hello.b)
如何转换hello。B到字符串'hello。B '?
目标是能够从本例中printVarName
内部的变量x
创建字符串'hello.b'
。
这不可能。在变量传递给函数后确定变量的原始名称
在变量的值被传递给函数之后,没有办法知道变量的原始名称是什么。
我能想到的最接近的东西是:
解决方案涉及安装dot-prop
包,该包用于解析字符串并查找对象中的相关属性。https://www.npmjs.com/package/dot-prop
声明:我与包本身没有关联
它也涉及到改变你的实现,因为你现在还需要传递你引用的对象本身。
import { getProperty } from 'dot-prop';
import { hello } from ...
function printVarName(obj, path) {
const value = getProperty(obj, path);
console.log(path, value);
}
printVarName({hello}, 'hello.b')
我们在作为第一个形参提供的对象中进行解构赋值。
传递{ hello }
将传递一个与{ hello: hello }
相同的对象,所以当你使用getProperty
方法时,它可以找到hello变量和它的嵌套值。
如果要从函数定义的作用域之外传递变量,第一个形参是必需的。否则,您可以创建一个包含所有变量值的常量对象,这将使您无需在提供对象的第一个参数中使用该参数。