我的问题很容易理解,我有一个对象(或类),我希望有一个方法可以获取AND设置属性。
事实上,我为“简单”属性编写它没有问题。当我的类具有对象属性,并且我想访问或更改嵌套属性时,它变得很困难。
我的课程:
var MyClass = function() {
this.name = 'defaultName';
this.list = {
a: 1,
b: 6
};
}
简单的课,不是吗?那么,我为我的方法写的是什么:
MyClass.prototype.getset = function(prop) {
let value = arguments[1];
let path = prop.split('.');
prop = this;
$(path).each(function(i) { prop = prop[this]; }
if (value) {
prop = value;
return this;
}
return prop;
}
“获取部分”有效(MyClass.getset('list.b')
返回6)。
但是“设定部分”......不起作用。
我希望当我执行MyClass.getset('list.b', 2)
时,b
的{{1}}属性变为2,而事实并非如此。
我知道为什么我的版本无效(我的list
变量只是“copy”并且不会影响对象本身),但我找不到解决方法...
谢谢你的帮助!
答案 0 :(得分:0)
如果要分配基元,则需要为对象的属性分配要更改的对象。检查value
是否为reduce
,如果是,请导航至最后一个属性,而不是最终属性。使用var MyClass = function() {
this.name = 'defaultName';
this.list = {
a: 1,
b: 6
};
}
MyClass.prototype.getset = function(prop, value) {
const props = prop.split('.');
const lastProp = props.pop();
const lastObj = props.reduce((obj, prop) => obj[prop], this);
if (value) {
lastObj[lastProp] = value;
return this;
} else return lastObj[lastProp];
}
const mc = new MyClass();
mc.getset('list.b', 2);
console.log(mc.list.b);
console.log(mc.getset('list.b'));
简洁:
Console.WriteLine