如何为对象编写全局get + set方法

时间:2018-06-14 09:28:43

标签: javascript jquery getter-setter

我的问题很容易理解,我有一个对象(或类),我希望有一个方法可以获取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”并且不会影响对象本身),但我找不到解决方法...

谢谢你的帮助!

1 个答案:

答案 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