我发现了以下关于如何使用内置 JavaScript 功能通过引用传递参数的建议:
[Javascript] JavaScript 中的值传递和引用传递
TypeScript 通过 ref 参数传递[重复]
然而,它们在实践中都不起作用。考虑以下代码示例:
let data = {
prop1: '[1,2,3]',
prop2: '{"abc":"def"}'
}
function parseString(ref prop) {
if(typeof prop === 'string') {
prop = JSON.parse(prop);
}
}
parseString(data.prop1);
parseString(data.prop2);
使用装箱方法
{item: data.prop1}
不起作用,因为该框将包含副本,而不是对原始 data.prop1
属性的引用。
如何正确实现上面的例子?
实现
parseString
功能的一种方法是指定父对象和一个字符串来指示引用的属性。这是实现该示例的代码:
function parseString(data, propName) {
if (!Object.keys(data).includes(propName)) {
throw new Error(`Object does not contain key ${propName}.`);
}
if(typeof prop === 'string') {
data[propName] = JSON.parse(data[propName]);
}
}
parseString(data, 'prop1');
parseString(data, 'prop2');