亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為類動態設置 getter 和 setter

為類動態設置 getter 和 setter

白板的微信 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);



查看完整回答
反對 回復 2023-11-11
?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

get/set您可以使用 ES6 構造為所有屬性創建Proxy,它允許您為對象實現低級方法(例如get,在訪問任何屬性時調用該方法)。


請注意,作為一項 ES6 功能,它具有廣泛但不通用的瀏覽器支持(例如,在 Internet Explorer 中不起作用),并且無法進行多填充,因為它使用的功能在舊版本的 JavaScript 中不存在。


查看完整回答
反對 回復 2023-11-11
  • 2 回答
  • 0 關注
  • 152 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號