Je rencontre une erreur dans le mode de compilation avancé.Comment fonctionne Google Closure EventTarget?
Uncaught TypeError: Object #<d> has no method 'attachEvent'
Après un peu de magie carte source Je pensais que cela est jeté de goog.events.listen
appel, où le premier argument est mon objet personnalisé, héritant goog.events.EventTarget
.
Ceci est source
goog.events.EventTarget.prototype.addEventListener = function(
type, handler, opt_capture, opt_handlerScope) {
goog.events.listen(this, type, handler, opt_capture, opt_handlerScope);
};
de fermeture Donc cette fonction se termine sur un prototype de mon objet, avec customEvent_ = true
, puis dans goog.events.listen
// Attach the proxy through the browser's API
if (src.addEventListener) {
if (src == goog.global || !src.customEvent_) {
src.addEventListener(type, proxy, capture);
}
} else {
// The else above used to be else if (src.attachEvent) and then there was
// another else statement that threw an exception warning the developer
// they made a mistake. This resulted in an extra object allocation in IE6
// due to a wrapper object that had to be implemented around the element
// and so was removed.
src.attachEvent(goog.events.getOnString_(type), proxy);
}
(La dernière ligne est celle qui jette
Cela ne devrait-il pas se terminer par un débordement de pile? Pourquoi cela se passe-t-il dans la branche else
si mon objet hérite addEventListener
de EventTarget
? En mode de compilation simple, tout fonctionne bien. Comment cela fonctionne-t-il, et pourquoi ai-je l'erreur seulement en mode de compilation avancé?
Pourriez-vous s'il vous plaît partager votre implémentation réelle de l'objet? – zakelfassi