jQuery插件开发:如何通过字符串键遍历获取settings对象的属性值
问题修正方案
核心错误说明
你编写的取值逻辑存在两个关键问题:
settings是$.extend合并生成的普通JS对象,不是DOM元素,完全不需要用$()将其包装为jQuery实例,$(settings)[0]本身就是冗余且无意义的写法。之前的拼接逻辑实际会把普通对象转为"[object Object]"形式的字符串,再和属性名文本拼接,完全取不到实际配置值。- 想要把字符串形式的文本作为对象属性名动态取值时,不能用对象拼接字符串的方式,需要使用JS原生的方括号属性访问语法。
正确实现代码
直接使用settings[value]的形式即可获取对应属性值,修正后的遍历逻辑如下:
let ds = ["download", "purchase", "amazon"] $.each(ds, function (index, value) { // 通过字符串属性名直接取值 const configValue = settings[value]; console.log(configValue); // 后续的有效值判断和业务逻辑可以直接基于取到的值编写 if (configValue) { // 此处写入对应业务逻辑 } });
语法说明
- 两种对象属性访问方式的等价关系:
- 硬编码固定属性时,
settings.download和settings["download"]效果完全一致 - 当属性名是变量、字符串常量这类动态来源时,只能用方括号语法,点号后面接变量是无法被JS识别为属性取值逻辑的。
- 硬编码固定属性时,
实际运行效果示例:当遍历到值为
"download"的数组项时,settings[value]就等价于手写的settings.download,会直接返回默认值"some text",完全符合预期。
内容的提问来源于stack exchange,提问作者Danny
相关产品推荐
相关产品推荐

