В Javascript возможно наследование с помощью функций-конструкторов и их атрибута «прототип» (т. Е. «Родительский элемент будущих экземпляров») или совсем недавно Object .create(), чтобы получить новые объекты.Сделать «функциональный объект» javascript наследуемым от другого
В последнее время мне нужно было «переопределить» объект JQuery («$») для одного из моих проектов, то есть предоставить аналогичную функцию, которая также имеет все функции fn/extend/... [inherited ] атрибутов оригинальной фабричной функции «jQuery».
Целью было иметь функцию «$()», которая всегда принимала «window.parent» как второй параметр по умолчанию, так что вся программа модифицировала родительский кадр, а не iframe, в котором была загружена программа ,
Обычно я ожидал, чтобы иметь возможность сделать что-то вроде этого:
var oldJQ = $;
$ = function (selector) {
return oldJQ(selector, window.parent);
}
$.__proto__ = oldJQ .__proto__;
$.extend({...}); // must work
Несмотря на многочисленные попытки, я не мог заставить его работать, я всегда получал простые объекты вместо реальных функций при использовании «новый ", или наследование не работает. Я нашел альтернативные способы (например, путем копирования всех атрибутов из $ в мой новый объект функции), но мне кажется, что это ужасный способ делать вещи.
Есть ли способ создать новый объект функции, который имеет в качестве родительского/прототипа исходного $ объекта?
Что вы делали? –
«У меня всегда были простые объекты вместо реальных функций». Учтите, что 'function' не является фактическим типом данных. [Эти] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Data_types) являются единственными фактическими типами данных. Проясняет? –
Нет, это невозможно. Объекты могут иметь только один прототип, а вещи, унаследованные от 'Function', не подлежат вызову. Прокси ES6 могут помочь, но это не совсем то же самое. – Ryan