JavaScript определить, когда создается новое свойство объекта - PullRequest
1 голос
/ 29 февраля 2020

Представьте себе следующее ....

function MyFunctional()
{
    this._internal = "";
}

var foo = new MyFunctional();
foo.bar = 0;
foo.gent = "foobar";

как можно вызвать событие, когда я звоню foo.x = y; или foo['x'] = y;? было бы создать setTimeout и проверить последний массив имен свойств? это было бы дорого ^^

Спасибо за чтение, надеюсь на ответ: D

1 Ответ

2 голосов
/ 29 февраля 2020

Вы можете сделать это с proxy объектом, который определяет пользовательское поведение для основных операций

function MyFunctional() {
    this._internal = "";
}

var foo = new MyFunctional();

//define the object whose properties are functions that define the behavior 
//of the proxy when an operation is performed on it.
const handler = {
  set: function(obj, prop, value) {
    if(!(prop in obj)) {
      alert(`property '${prop}' added`);
    }
    obj[prop] = value;
  }
}

const p = new Proxy(foo, handler);

p.bar = 0;
p.gent = "foobar";
p.bar = 2;

console.log(foo)
...