Domanda

Scusa se questo si risponde da qualche parte (probabilmente lo è), ma non sono del tutto sicuro di come chiedere anche in modo corretto, quindi non sono riuscito a ricercare :(

Fondamentalmente voglio fare qualcosa di simile:

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

Fondamentalmente ae b sono oggetti. Uno o l'altro esistono volontà, ma non entrambi. Ma io non so che esiste, ma ho bisogno di aggiungere un metodo a qualsiasi uno fa.

Ora, so che avrei potuto fare qualcosa di simile:

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

function c () {
  // do something
}

Ma questo ha il problema di c avere un proprio spazio dei nomi a livello mondiale, e non voglio questo. Non voglio c avere un proprio spazio dei nomi a livello mondiale in qualsiasi punto nel tempo.

Soo ... ovviamente il primo bit del codice di cui sopra non funziona. Come potrei fare per questo? O è qualcosa di simile a questo semplicemente non è possibile? Non esitate a chiudere e puntare a me nella giusta direzione, se questo è stato risposto prima ...

È stato utile?

Soluzione

Credo che qualcosa di simile a questo risolverà il problema:

(function() {
  var f = function() {
    //Prototype function
  };
  if(a)
    a.prototype.f = f;
  if(b)
    b.prototype.f = f;
})();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top