2017-02-19 6 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

Почему бы не использовать геттеры/сеттеры объекта?

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

А как насчет использования геттеров/сеттеров на уже существующих свойствах? –

+0

Object.defineProperty может решить эту проблему. – vgoreiko