簡體   English   中英

在新鍵上動態運行Object.defineProperty

[英]Dynamically running Object.defineProperty on new keys

我正在使用Object.defineProperty重寫對象上的getter和setter,以便我可以偵聽所有突變事件。

var a = {};
Object.defineProperty(a, key, {
  get: function(){
    ..
  },
  set: function(val){
    ..
  }
}

這很好用,但有一個警告-我需要提前知道我想聽的屬性-這意味着我需要迭代我想看的所有鍵。

如果我想在運行時像這樣隨機分配新屬性:

a.new_attr=1;

因為我還沒有定義new_attr屬性,所以它不起作用。

有沒有一種方法可以:

  1. 第一次分配屬性時,動態運行Object.defineProperty() 要么
  2. 還有其他方法來處理這種情況嗎? (也許可以通過某種方式監視所有屬性而無需指定鍵)

我認為您真正想要使用的是Proxy 代理允許您攔截諸如get和set之類的事件。

 var obj = { a: 1, b: 2 }; var proxiedObj = new Proxy(obj, { get: function(target, name) { console.log(`get: ${name}`); return target[name]; }, set: function(target, prop, value) { console.log(`set: ${prop}`); target[prop] = value; } }); console.log(proxiedObj.a); console.log(proxiedObj.b); // Notice that it still works even on new properties proxiedObj.c = 3; console.log(proxiedObj.c); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM