gpt4 book ai didi

javascript - 如何在私有(private)对象上设置特定属性

转载 作者:搜寻专家 更新时间:2023-11-01 05:25:40 24 4
gpt4 key购买 nike

我希望能够通过为值提供非符号路径来在 private 对象上设置属性。困难在于这个对象在闭包中,所以我无法直接访问它以按正常方式设置值(例如,dot.notation.path = 'new value')。这看起来很奇怪,但我想不出明显的方法。

示例:

// setter function   
function set(path, change){
var privateObject = {
a: 'a',
b: 'b',
c: {
d: 'd',
e: 'e'
}
}

privateObject[path] = change;
return privateObject;
}

// execution
var result = set('c.d', 'new value');

// desired result
//{
// a: "a"
// b: "b"
// c: {
// d: "new value",
// e: 'e'
// }
//}

// actual result
//{
// a: "a"
// b: "b"
// c: {
// d: 'd',
// e: 'e'
// }
// c.d: "new value"
//}

工作示例:

Failing JSFiddle Example >>

[更新] 替代示例:

Working JSFiddle Example >>

最佳答案

你真的很接近,但括号符号不会为你处理点(它不能——点是属性名称的完全有效字符)。你必须自己做:

function set(path, change){
var privateObject = {
a: 'a',
b: 'b',
c: {
d: 'd',
e: 'e'
}
},
index,
parts,
obj;

parts = path.split(".");
obj = privateObject;
if (parts.length) {
index = 0;
while (index < parts.length - 1) {
obj = obj[parts[index++]];
}
obj[parts[index]] = change;
}
return privateObject;
}

Live demo

我把它划掉了,它在旧引擎上效率不高,我也懒得去探索故障模式,但你明白了:分割你在点上给出的路径,然后使用每个组件部分页面。

关于javascript - 如何在私有(private)对象上设置特定属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8421605/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com