Как правильно расширить класс?

235
10 апреля 2017, 06:56

Пытаюсь расширить класс Array при помощи prototype, добавив в него свой метод, но при обходе массива циклом созданный метод видится элементом массива:

Array.prototype.fun = (function() {
})();
var arr = [1, 2];
for (var i in arr) {
    alert(i);
}

https://jsfiddle.net/phojh6qk/

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

Answer 1

Метод defineProperty позволяет задать такие параметры, в том числе, и enumerable - чтобы созданное свойство не было видно при обходе массива циклом:

Object.defineProperty(Array.prototype, 'fun', {
    value: function() {
    }
});

По умолчанию, значение enumerable установлено в false.

https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty

READ ALSO
Первые шаги в typescript

Первые шаги в typescript

В коде я часто использую функцию как объект, то есть:

226
Ошибка кросдоменного POST запроса на angularjs

Ошибка кросдоменного POST запроса на angularjs

Отправляем запрос таким кодом:

227
Дан input.Заменить четные символы в строке на знак “?”

Дан input.Заменить четные символы в строке на знак “?”

Использую input и кнопку для получения данных из оногоJs имею такой вот код:

193