В настоящее время я пытаюсь понять свойство constructor
в javascript.
Просто на голову, я понимаю, что изменения свойств встроенных элементов следует избегать, я играю с этим, потому что хочу лучше понять основные принципы.
Я пытался изменитьсвойство constructor
по умолчанию []
(т.е. конструктор по умолчанию для объектов массива)
[].__proto__.constructor === [].constructor; // true
[].constructor = function A(){}; // attempts to reset the constructor property to a new function
[].constructor; // prints ƒ Array() { [native code] }, which indicate the attempt failed
Но когда я проверил дескриптор свойства [].constructor
Object.getOwnPropertyDescriptor([].__proto__, 'constructor');
, который печатает
{value: ƒ, writable: true, enumerable: false, configurable: true}
Итак, свойство [].__proto__.constructor
равно writable
?
Поэтому я пытаюсь установить свойство constructor
с помощью [].__proto__
, оно успешно
[].__proto__.constructor = function B(){};
[].__proto__.constructor; // prints: ƒ B(){}, which indicate the attempt succeded
Почему не удалось изменить свойство constructor
с помощью []
, а с помощью [].__proto__
успешно?Даже если [].constructor === [].__proto__.constructor
вернул true
.