Как организовать наследование во встроенных классах JavaScript, чтобы методы вызывались по цепочке вверх? Допустим метод any() определяется для встроенного класса Object и Array через свойство prototype:Object.defineProperty(Object.prototype, "any", {
value: function(){
console.log("object.any");
return this;
} // function
,enumerable :false
});
Array.prototype.any = function(){
console.log("array.any");
return this;
}; // any
[].any();
Однако, при вызове [].any() вызывается метод any() определённый для класса Object. Каким должна быть схема определения методов, чтобы функции вызывались по цепочке вверх в зависимости от наличия в прототипах своих ближайших родителей?

21 Авг 2019 в 07:04
181 +1
0
Ответы
1

Для организации наследования во встроенных классах JavaScript таким образом, чтобы методы вызывались по цепочке вверх, можно воспользоваться механизмом наследования прототипов. В данном случае, если метод any() определяется для класса Array и не определен для класса Object, то при вызове [].any() будет вызываться метод из прототипа Array.

Пример кода, который позволит вызывать методы по цепочке вверх в зависимости от наличия в прототипах своих ближайших родителей:

// Определяем метод any() для класса Object
Object.prototype.any = function(){
console.log("object.any");
return this;
};
// Создаем прототип для класса Array, унаследованный от прототипа Object
Array.prototype = Object.create(Object.prototype);
// Определяем метод any() для класса Array
Array.prototype.any = function(){
console.log("array.any");
return this;
};
[].any(); // В этом случае будет вызван метод из прототипа Array

Таким образом, при вызове метода any() для массива будет вызываться метод из прототипа Array, а если метод не определен для класса Array, то будет вызван метод из прототипа Object.

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