В то время как это не невозможно, это сомнительная практика - изменение внутреннего API-интерфейса mootools.Если вы не разбираетесь в mootools и не следуете указаниям dev на github и не знаете, что ваши изменения не нарушат совместимость в будущем, я бы порекомендовал против этого.
На мой взгляд, у вас есть два маршрута:
создайте новый метод Element через implement
, который выполняет вашу логику.Например: Element.addMyEvent
, который делает ваше дело, затем вызывает нормальный element.addEvent
после.это является предпочтительным и не имеет реальных побочных эффектов (см. выше)
изменить прототип напрямую.означает, что вы не можете рефакторинг любого кода, и он будет просто работать.это может означать, что у других, которые приступят к работе с вашим кодом, возникнут трудности с его отслеживанием, а также проблемы с трассировкой / устранением неполадок - подумайте, кто-то, кто знает mootools и стандартное поведение addEvent
, даже не подумает проверить прототипы, если у них возникнут проблемы.
Выход mootools 2.0, скорее всего, приведет к недопустимости способа 2, описанного выше, если mootools отходит от модификации Element.prototype
в пользу оболочки (для совместимости с другими фреймворками).Вернитесь к методу 1 :)
Я думаю, что решение 1 лучше и очевиднее.
как для 2: http://jsfiddle.net/dimitar/aTukP/
(function() {
// setup a proxy via the Element prototype.
var oldProto = Element.prototype.addEvent;
// you really need [Element, Document, Window] but this is fine.
Element.prototype.addEvent = function(type, fn, internal){
console.log("added " + type, this); // add new logic here. 'this' == element.
oldProto.apply(this, arguments);
};
})();
document.id("foo").addEvent("click", function(e) {
e.stop();
console.log("clicked");
console.log(e);
});
это так просто.имейте в виду, Element.events
также следует перейти к документу и окну.кроме того, это не изменит миксин класса Events
, для этого вам нужно изменить рефакторинг Events.addEvent
.