如何将Getter / Setter应用于对象

时间:2017-08-09 21:59:32

标签: javascript node.js constructor getter-setter

在定义对象时如何将getter / setter应用于对象?

例如,我想制作

myobj = 123运行console.log(123)

我知道可以使用class extends,但我想找到一种更简单的方法来定义构造函数中的getter / setter,可能

有谁知道怎么做?这甚至可能吗?

如果您需要更多信息,或者我不够清楚,请告诉我。 - JacobTDC

3 个答案:

答案 0 :(得分:1)

getterssetters与对象的属性相关,而不是与您的问题中的变量分配相关。

class extends与此无关。

选中此示例[1]

var language = {
  set current(name) {
    this.log.push(name);
  },
  log: []
}

language.current = 'EN';
console.log(language.log); // ['EN']

language.current = 'FA';
console.log(language.log); // ['EN', 'FA']

来自MDN的

1代码

答案 1 :(得分:0)

这实际上在MDN Working with Objects, Defining getters and setters中有详细描述 - 本文提供了JavaScript中getter和setter用法的简单示例。

此示例的修改版(以适合您的问题)版本如下所示:

var o = {
    set myvar(value) {
        console.log(value);
        this.myvar = value;
    }
};

o.myvar = 123;
// Should call console.log(123)

还有另一种方法 - 您可以使用ES2015 Proxies及其get()set()陷阱。在由于某种原因您不想修改原始对象的情况下,这可能很有用。

这两个代理是每个对象的“全局”(因为 - 它们捕获在代理对象的所有属性上执行的获取/设置)。这是一个基于链接文章的简单示例:

var o = new Proxy({}, {
    set: function(target, prop, value, receiver) {
        target[prop] = value;

        // "set" proxy is global, so it will catch calling assignment operator on ALL properties of this object
        if (prop === "myvar") {
            console.log(value)
        }

        return true
    }
});

o.myvar = 123;
// Should call console.log(123)

答案 2 :(得分:0)

您可以使用Object.defineProperty()为该属性定义一个setter:

var a = {}
Object.defineProperty(a, 'myobj', {
  set: function (value) {
    console.log(value)
  }
})
a.myobj = 111