2017-02-19 44 views
0

我可以使用ES6代理觀察對象,獲取和設置屬性等? 例如:使用ES6代理觀察對象

var obj = {a: 1; b: 2}; 
obj.a = 3; // I need to catch this setting, like a Object.watch() in Firefox 
+1

當然可以。您可以瞭解在MDN代理:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy –

回答

3

是的,這是他們在做什麼的一部分。您正在尋找的陷阱稱爲set

let obj = {a: 1, b: 2}; 
 
let p = new Proxy(obj, { 
 
    set(target, name, value) { 
 
    console.log("set " + name + " to " + value); 
 
    target[name] = value; 
 
    } 
 
}); 
 
p.a = 3;

+0

是的,但這並不負責設置值'obj.a'直。 –

+1

@KesantieluDasefern:不,當然不是。爲了處理這一點,你不得不修改'obj'(例如,安裝的getter/setter組合),這將是財產特定的。 AFAIK,沒有類似Object.watch的功能的計劃;性能對效用的影響太大了。 –

+0

其實Object.observe計劃在ES7,但他們決定支持代理服務器來代替。 – inf3rno

0

爲什麼不使用對象的getter/setter方法?

let ourObj = { 
    get a(){ 
     return this._a; 
    } 
    set a(val){ 
     console.log(val); 
     this._a = val 
    } 
} 
+0

那麼在現有的屬性上使用getters/setter呢? –

+0

Object.defineProperty可以解決這個問題。 – vgoreiko