Задать вопрос
@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
  • Вопрос задан
  • 1355 просмотров
Подписаться 1 Оценить 1 комментарий
Решения вопроса 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.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы