如何将Getter / Setter应用到对象
在定义它的时候,如何将一个getter / setter应用到一个对象本身?
例如,我想做
myobj = 123
运行console.log(123)
我知道这是可能的,通过使用class extends
,但我想find一个更简单的方式, 可能在构造函数中定义getter / setter。
有谁知道如何? 这甚至有可能吗?
如果您需要更多信息,或者我不够清楚,请告诉我。 - JacobTDC
getters
和setters
与对象的属性相关,而不是用于variables赋值,就像你的问题一样。
这个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中使用对象,定义getter和setter,这实际上是很好的描述 – 本文提供了一个简单的getter和setter在JavaScript中使用的例子。
这个例子的一个修改(适合你的问题)版本将如下所示:
var o = { set myvar(value) { console.log(value); this.myvar = value; } }; o.myvar = 123; // Should call console.log(123)
还有另一种方法可以做到这一点 – 你可以使用ES2015代理和他们的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)
你可以使用Object.defineProperty()
来为属性定义一个setter:
var a = {} Object.defineProperty(a, 'myobj', { set: function (value) { console.log(value) } }) a.myobj = 111