如何将 Getter/Setter 应用于对象
How to Apply a Getter/Setter to an Object
如何在定义对象时将 getter/setter 应用于对象本身?
例如我想制作
myobj = 123
运行 console.log(123)
我知道使用class extends
是可能的,但我想找到一种更简单的方法来定义构造函数中的getter/setter、可能 .
有人知道怎么做吗?这甚至可能吗?
如果您需要更多信息,或者我不够清楚,请告诉我。 - JacobTDC
getters
和 setters
与对象的属性相关,而不是变量分配,就像您的问题一样。
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']
1 代码取自 MDN
这在 MDN Working with Objects, Defining getters and setters 上有很好的描述 - 本文提供了一个简单的 getter 和 setter 用法示例 JavaScript。
此示例的修改版本(以解决您的问题)如下所示:
var o = {
set myvar(value) {
console.log(value);
this.myvar = value;
}
};
o.myvar = 123;
// Should call console.log(123)
还有另一种方法可以做到这一点 - 您可以使用 ES2015 代理及其 get()
and set()
陷阱。这在出于某种原因不想修改原始对象的情况下可能很有用。
这两个代理是每个对象 "global"(如 - 它们捕获对代理对象的所有属性执行的 gets/sets)。这是一个基于链接文章的简单示例:
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
如何在定义对象时将 getter/setter 应用于对象本身?
例如我想制作
myobj = 123
运行 console.log(123)
我知道使用class extends
是可能的,但我想找到一种更简单的方法来定义构造函数中的getter/setter、可能 .
有人知道怎么做吗?这甚至可能吗?
如果您需要更多信息,或者我不够清楚,请告诉我。 - JacobTDC
getters
和 setters
与对象的属性相关,而不是变量分配,就像您的问题一样。
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']
1 代码取自 MDN
这在 MDN Working with Objects, Defining getters and setters 上有很好的描述 - 本文提供了一个简单的 getter 和 setter 用法示例 JavaScript。
此示例的修改版本(以解决您的问题)如下所示:
var o = {
set myvar(value) {
console.log(value);
this.myvar = value;
}
};
o.myvar = 123;
// Should call console.log(123)
还有另一种方法可以做到这一点 - 您可以使用 ES2015 代理及其 get()
and set()
陷阱。这在出于某种原因不想修改原始对象的情况下可能很有用。
这两个代理是每个对象 "global"(如 - 它们捕获对代理对象的所有属性执行的 gets/sets)。这是一个基于链接文章的简单示例:
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