Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.08.2010, 01:46
Интересующийся
Отправить личное сообщение для sg550 Посмотреть профиль Найти все сообщения от sg550
 
Регистрация: 14.07.2010
Сообщений: 11

универсальный метод
Как можно сделать метод, который проделывал бы что-либо на любом объекте, который этот метод вызовет? То есть, например, у меня есть такая функция:
function a(){alert(this);}

и я хочу, чтоб она при применении на, например, диве, выводила "[object HTMLDivElement]". Как это можно сделать?
Ответить с цитированием
  #2 (permalink)  
Старый 22.08.2010, 01:55
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 09.07.2008
Сообщений: 3,873

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();

Последний раз редактировалось Octane, 22.08.2010 в 02:24.
Ответить с цитированием
  #3 (permalink)  
Старый 22.08.2010, 02:01
Интересующийся
Отправить личное сообщение для sg550 Посмотреть профиль Найти все сообщения от sg550
 
Регистрация: 14.07.2010
Сообщений: 11

Спасибо, call - почти то, что нужно. Но можно ли довести дело до того, чтобы можно было писать такой код:
document.getElementsByTagName('div').a();

?
Ответить с цитированием
  #4 (permalink)  
Старый 22.08.2010, 02:07
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 09.07.2008
Сообщений: 3,873

Дополнил сообщение выше.
Ответить с цитированием
  #5 (permalink)  
Старый 22.08.2010, 02:44
Интересующийся
Отправить личное сообщение для sg550 Посмотреть профиль Найти все сообщения от sg550
 
Регистрация: 14.07.2010
Сообщений: 11

Спасибо
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать у какого объекта вызван метод. Scalar Events/DOM/Window 4 26.03.2010 10:10
Как по событию вызвать метод определенного экземпляра объекта jvs jQuery 3 24.12.2009 15:04
Назначить на обработчик события метод обьекта Logo Общие вопросы Javascript 11 20.06.2009 22:40
Добавить свой метод к элементу alekciy Events/DOM/Window 6 16.02.2009 18:29
1. Календарь 2. объект String метод getEMail Мандариновая Общие вопросы Javascript 8 31.10.2008 10:33