Frage

Entschuldigung, wenn dies irgendwo beantwortet wird (es ist wahrscheinlich), aber ich bin mir nicht ganz sicher, wie ich es überhaupt richtig fragen soll, also habe ich bei der Suche gescheitert :(

Grundsätzlich möchte ich so etwas tun:

(a||b).prototype.c = function () {
  // do something
}

Grundsätzlich sind A und B Objekte. Der eine oder der andere wird existieren, aber nicht beides. Aber ich weiß nicht, was existieren wird, aber ich muss eine Methode hinzufügen, was auch immer man tut.

Jetzt weiß ich, dass ich so etwas tun könnte:

if (typeof(a) == 'object') {
  a.prototype.c = c;
} else if (typeof(b) == 'object') {
  b.prototype.c = c;
} 

function c () {
  // do something
}

Aber dies hat das Problem, dass C seinen eigenen Namespace auf globaler Ebene hat, und das will ich nicht. Ich möchte nicht, dass C zu jedem Zeitpunkt seinen eigenen Namespace auf globaler Ebene hat.

Soo ... offensichtlich funktioniert das erste Stück Code oben nicht. Wie würde ich das vorgehen? Oder ist so etwas einfach nicht möglich? Bitte zögern Sie nicht zu schließen und mich in die richtige Richtung zu weisen, wenn dies zuvor beantwortet wurde ...

War es hilfreich?

Lösung

Ich denke, so etwas wird Ihr Problem lösen:

(function() {
  var f = function() {
    //Prototype function
  };
  if(a)
    a.prototype.f = f;
  if(b)
    b.prototype.f = f;
})();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top