универсальный метод
Как можно сделать метод, который проделывал бы что-либо на любом объекте, который этот метод вызовет? То есть, например, у меня есть такая функция:
function a(){alert(this);} и я хочу, чтоб она при применении на, например, диве, выводила "[object HTMLDivElement]". Как это можно сделать? |
Object.prototype.a = function () { alert(this); }; document.createElement("div").a();Но в IE DOM-элементы не являются потомками Object, поэтому работать не будет. Если нужно конкретно для DOM-элементов, а не всех объектов, то так: HTMLElement.prototype.a = function () { alert(this); }; document.createElement("div").a();Опять же в IE6,7 нет такого конструктора, в IE8 можно использовать конструктор Element, но только в Standards Compliant Mode. Можно динамически менять контекст вызова: http://javascript.ru/Function/call http://javascript.ru/Function/apply Или добавлять каждый раз этот метод: function a() { alert(this); } var node = document.createElement("div"); node.a = a; node.a(); Ну и есть еще такой вариант: function $(node) { this.node = node; } $.prototype.a = function () { alert(this.node); }; new $(document.createElement("div")).a(); Или без new: function $(node) { return new $.wrapper(node); } $.wrapper = function (node) { this.node = node; }; $.wrapper.prototype = $.prototype = { constructor: $, a: function () { alert(this.node); return this; }, b: function () { alert(this.node.nodeName); return this; } }; $(document.createElement("div")).a().b(); |
Спасибо, call - почти то, что нужно. Но можно ли довести дело до того, чтобы можно было писать такой код:
document.getElementsByTagName('div').a(); ? |
Дополнил сообщение выше.
|
Спасибо :)
|
Часовой пояс GMT +3, время: 14:13. |