Как добавить метод в стандартный объект 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

21 Авг 2019 в 07:05
362 +1
0
Ответы
1

Для того чтобы скрыть добавленный метод при переборе объекта, можно использовать специальный символ Symbol. Вместо добавления метода напрямую в Object.prototype, можно добавить его как свойство объекта, где ключом будет символ Symbol.

Пример:

const flipSymbol = Symbol('flip');
if (!Object.prototype[flipSymbol]) {
Object.defineProperty(Object.prototype, flipSymbol, {
value: function(bSelf) {
if (bSelf === undefined || bSelf) {
for (let k in this) {
if (this.hasOwnProperty(k)) {
this[this[k]] = k;
delete this[k];
}
}
return this;
} else {
return this.flip();
}
},
enumerable: false
});
}
const oObject = {1: "a", 2: "b", 3: "c"};
for (let k in oObject) {
if (oObject.hasOwnProperty(k)) {
console.log(k); // a, b, c
}
}
console.log(Object.getOwnPropertySymbols(Object.prototype)); // [Symbol(flip)]

Теперь метод flip не будет отображаться при обычном переборе объекта, но он доступен для использования как метод объекта через символ Symbol.

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир