如何通过字符串值为JavaScript/JSON对象添加指定属性?
如何通过字符串动态为JavaScript对象添加嵌套属性?
当然可以!而且完全不用折腾JSON.stringify和JSON.parse这种绕路的方法——JavaScript本身就提供了非常直接的动态属性操作方式,比字符串拼接优雅太多了。
先看你的需求:调用addProp方法,把指定名称的属性添加到对象上,属性值是一个包含type字段的子对象。其实只要用方括号语法就能轻松实现动态属性名的赋值。
修正后的完整实现
先把你的代码里的小语法问题(比如for循环的括号写错了)修正,然后给出正确的addProp方法:
let myObj = {}; // 给myObj添加addProp方法 myObj.addProp = function(name, type) { // 用方括号访问动态属性名,直接赋值为包含type的对象 this[name] = { type: type }; }; // 调用示例 myObj.addProp("title", "string"); myObj.addProp("id", "integer"); console.log(myObj); // 输出结果完全符合你的预期: // { title: { type: 'string' }, id: { type: 'integer' } }
关键原理说明
this[name]是JavaScript的动态属性访问语法:当属性名是变量或者字符串时,不能用.语法(比如this.name只会找名为name的属性),而方括号可以直接解析括号里的字符串/变量作为属性名。- 这里的
this指向调用方法的对象myObj,所以直接操作this就等同于操作myObj本身。
批量添加属性的场景
如果要遍历propsToAdd数组批量添加,注意用for...of(遍历数组元素)而不是for...in(遍历对象键),代码如下:
const propsToAdd = [ { name: "title", type: "string" }, { name: "id", type: "integer" }, { name: "status", type: "boolean" } ]; for (const prop of propsToAdd) { myObj.addProp(prop.name, prop.type); }
更通用的工具函数版本
如果你不想给每个对象都单独加addProp方法,也可以写一个通用工具函数:
function addNestedProp(obj, propName, propType) { obj[propName] = { type: propType }; } // 使用方式 addNestedProp(myObj, "title", "string");
这种方法既简洁又高效,完全避免了字符串拼接可能带来的语法错误,也比JSON转换的性能好得多。
内容的提问来源于stack exchange,提问作者Gobliins
相关产品推荐
相关产品推荐

