2008-09-25 2 views
1

Я хотел бы прослушивать вызовы методов.Как прослушивать вызовы методов элементов в Javascript

Например, когда элемент добавляется ничем к документу, я хотел бы передать этот элемент действовать на нем, как:

// где

aParent.appendChild(aChild); 

// когда первая функция, определенная как слушатель, вызывается с aChild в качестве аргумента

Кто-нибудь знает, как это сделать?

+0

Если для этого существует техника общего назначения, можно реализовать Аспекты. Хмм ... Это то, что вы имеете в виду Жюльена? http://en.wikipedia.org/wiki/Aspect-oriented_programming – 2008-09-25 16:56:48

ответ

1

не знаю, если это возможно, с основными функциями, но вы всегда можете создать свои собственные функции, для действий, которые вы хотите контролировать:


function AppendChild(oParent, oChild) { 

    // your stuff on oParent 

    // append oChild 
    oParent.appendChild(oChild) 
} 

или, может быть, изменить фактическое AppendChild() , но это было бы сложно ...

0

Я знаю, что Dojo Toolkit предоставляет эту функциональность. Вы можете пояснить here - перейти к разделу «Подключение функций к другому». Если вам интересно, вы можете посмотреть the source of dojo.connect, чтобы узнать, что происходит.

0

В Firefox вы можете переписать Node .prototype.appendChild, чтобы вызвать вашу собственную функцию (сначала сохранить исходную appendChild, а затем вызвать ее внутри) для выполнения дополнительных действий.

Node.prototype._appendChild = Node.prototype.appendChild; 
Node.prototype.appendChild = function myFunct(el){....; this._appendChild(el);} 

Internet Explorer не реализует эти интерфейсы (но может быть обходной путь плавает, возможно, используя .htc ..). IE8 будет иметь Element вместо Node.

0

Что вы описываете, это Aspect Oriented programming. В языке AOP вашей «точкой соединения» будет element.appendChild(), и ваш «совет» - это функция, которую вы хотели бы выполнить (до и/или после), каждая выполняемая точка соединения выполняется.

Я был очень заинтересован в возможностях для JavaScript AOP в течение некоторого времени, и я только что нашел это Aspect Oriented Programming and javascript, который выглядит многообещающим, без необходимости принимать большой старый API. - Я очень рад, что ты это сделал. У меня есть для этого использование, например, временные записи, сегменты кода времени и т. Д.

0

Несколько браузеров обрабатывают DOM по-разному, и, к сожалению, способ обработки IE не такой мощный, как способ Mozilla. Самый простой способ сделать это - использовать пользовательскую функцию, подобную той, которую упомянула Филини.

Однако вы также можете обернуть различные объекты DOM браузеров на фасаде и использовать его для доступа к любому элементу. Это немного больше, но вы сможете обрабатывать все браузеры одинаково и иметь возможность добавлять/удалять слушателей с легкостью. Я не уверен, будет ли это более полезно, чем пользовательские функции, но стоит посмотреть.

Смежные вопросы