defineproperty для object.prototype не срабатывает при создании вложенных объектов - PullRequest
0 голосов
/ 16 марта 2020

Я просто возился, пытаясь понять, как он должен работать, но этот сценарий меня смутил.

Object.defineProperty(Object.prototype, 'a', {set: function() {console.log("Set!");} });

Используя этот метод, я предполагаю, что каждый раз, когда я создаю объект с именем a, эта функция должна срабатывать. Это работает здесь:

a = {};
Set!

Но не тогда, когда вложено так:

test = {a:{}};

Я что-то неправильно понимаю?

1 Ответ

0 голосов
/ 16 марта 2020

Литерал объекта {a: …} создает новый объект с собственным свойством. Он не вызывает никаких унаследованных сеттеров для создания свойства, в частности предотвращает JSON угон .

Однако следующий код будет иметь желаемое поведение:

test = {};
test.a = {};
...