Объекты, которые возвращает jQuery, являются объектами jQuery, а не объектами DOM. Они содержат коллекций объектов DOM, но jQuery вообще не добавляет никаких методов к объектам DOM. jQuery.fn
- это просто ссылка на прототип объектов, возвращаемых jQuery, что позволяет вам напрямую добавлять методы к этому прототипу.
Поскольку вы заинтересованы в воспроизведении поведения jQuery, вы можете сделать то же самое: обернуть нативные объекты DOM в собственный класс, добавив любые методы, которые вы хотите, в этот класс-обертку. Обратите внимание, что вы не можете вызывать какой-либо метод объекта DOM для экземпляра jQuery; jQuery определяет некоторые служебные методы для вызова реальных методов DOM, но для вызова многих других методов DOM вам необходимо получить доступ к реальным объектам DOM, заключенным в экземпляр jQuery. У вас будет такое же ограничение с вашим пользовательским классом-оберткой - вам нужно будет реализовать методы в вашей обертке, которые перенаправляют вызов базовому объекту DOM.
Пример:
function DOMWrapper(domObject) {
this.domObject = domObject;
}
DOMWrapper.prototype = {
constructor: DOMWrapper,
foo: function(arg1, arg2, arg3) {
// this.domObject refers to the wrapped object here
this.domObject.nativeMethod();
// you could do things like this here:
return this.bar.call(this.domObject, arg1, arg2, arg3);
},
bar: function(arg1, arg2, arg3) {
// now, even though "bar" is defined as a method of
// the DOMWrapper prototype, it has been invoked by "foo"
// in the context of the wrapped DOM object, so
// "this" refers directly to the DOM object in this method
// this goes to the actual DOM nativeMethod:
return this.nativeMethod();
},
domMethodWrapper: function() {
return this.domObject.nativeMethod();
}
}