Каждый руководитель мнения JS говорит, что расширение родных объектов - это плохая практика. Но почему? Получаем ли мы удар производительности? Они боятся, что кто-то делает это "неправильно" и добавляет перечислимые типы в Object
, практически уничтожая все циклы на любом объекте?
Возьмите TJ Holowaychuk should.js, например. Он добавляет простой getter в Object
, и все работает отлично (source).
Object.defineProperty(Object.prototype, 'should', {
set: function(){},
get: function(){
return new Assertion(Object(this).valueOf());
},
configurable: true
});
Это действительно имеет смысл. Например, можно расширить Array
.
Array.defineProperty(Array.prototype, "remove", {
set: function(){},
get: function(){
return removeArrayElement.bind(this);
}
});
var arr = [0, 1, 2, 3, 4];
arr.remove(3);
Существуют ли какие-либо аргументы против расширения собственных типов?