@roskoshinsky

Как добавить метод в стандартный объект JavaScript?

Привет! Добавляю метод в стандартный объект Object JavaScript через Object.prototype. Однако, после этого, он становится одним из свойств любого объекта, который появляется при переборе (for in), при этом hasOwnProperty, понятно, не спасает. Как сделать так, чтобы метод был "скрыт" при переборе, не выявлялся как свойство?

if(Object.prototype.flip === undefined){
  (function(){
    Object.prototype.flip = function(bSelf){
      if(bSelf === undefined || bSelf){
        for(var k in this)if(this.hasOwnProperty(k)){
          this[this[k]] = k;
          delete this[k];
        } // fr
        return this;
      } else {
        var oObject = this;
        return oObject.flip();
      } // if
    }; // flip
  })();
} // if

var oObject = {1:"a", 2:"b", 3:"c"};
for(var k in oObject)if(oObject.hasOwnProperty(k)){
  log(k); // a, b, c, flip
} // fr
  • Вопрос задан
  • 1296 просмотров
Решения вопроса 1
NaN
@NaN
Object.defineProperty(Object.prototype, 'flip', {

   value: function(){},
   enumerable: false,

});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@roskoshinsky Автор вопроса
Коллеги, я ошибся в приведённом примере кода, ясно что вместо this там должен был быть oObject. Но самое главное, я не уточнил, что речь идёт о Google Script и в нём метод виден при перечислении свойств. Однако, решение NaN помогло. Единственное, что первы аргумент не Object a Object.prototype. Спасибо, NaN!)
Ответ написан
Комментировать
@Maa-Kut
hasOwnProperty вполне себе спасает, просто вызывать его надо не у this, а у oObject.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
26 апр. 2024, в 07:47
2000 руб./за проект
26 апр. 2024, в 06:46
1000 руб./в час
26 апр. 2024, в 05:31
1000 руб./за проект