白板的微信
2023-11-11 21:37:05
我可以在創建類之后從字符串值外部設置類的屬性,如下所示class Class { //Nothing}let storageClass = new Class();storageClass['value'] = 'Hello World';document.write(storageClass.value);但我需要跟蹤所有屬性的更改,以便我可以使用get和set,但我無法僅基于 添加新屬性storageClass['value'] = 'Hello World';。例如,如果我想做的話,我必須添加 get 和 set 函數storageClass['valueNumberTwo'] = 'A Second Value';class Class { get value() { return this._value; } set value(value) { this._value = value; console.log('Value Changed'); }}let storageClass = new Class();storageClass['value'] = 'Hello World';document.write(storageClass.value);如果我知道創建類時可以創建的所有屬性,是否有辦法仍然可以做到這一點?
2 回答

largeQ
TA貢獻2039條經驗 獲得超8個贊
您可以使用 aProxy
來處理動態獲取和設置操作。
class Class {
? constructor() {
? ? return new Proxy(this, {
? ? ? get(target, prop, receiver) {
? ? ? ? return target['_' + prop];
? ? ? },
? ? ? set(obj, prop, value) {
? ? ? ? obj['_' + prop] = value;
? ? ? ? console.log('value changed');
? ? ? }
? ? });
? }
}
let storageClass = new Class;
storageClass['value'] = 'Hello World';
document.write(storageClass.value);

呼啦一陣風
TA貢獻1802條經驗 獲得超6個贊
get/set
您可以使用 ES6 構造為所有屬性創建Proxy
,它允許您為對象實現低級方法(例如get
,在訪問任何屬性時調用該方法)。
請注意,作為一項 ES6 功能,它具有廣泛但不通用的瀏覽器支持(例如,在 Internet Explorer 中不起作用),并且無法進行多填充,因為它使用的功能在舊版本的 JavaScript 中不存在。
添加回答
舉報
0/150
提交
取消