2014-07-17 12 views
5

Sto guardando essenza di Addy Osmani per un modello di pubblicazione/sottoscrizione qui:Creazione di una variabile globale il valore di ritorno di una funzione

https://github.com/addyosmani/pubsubz/blob/master/pubsubz.js

Lui superfici suo oggetto come un globale come questo:

;(function (window, doc, undef) { 

var topics = {}, 
    subUid = -1, 
    pubsubz ={}; 

.... 

getPubSubz = function(){ 
    return pubsubz; 
}; 

window.pubsubz = getPubSubz(); 

Qual è il valore della creazione della funzione getPubSubz? Non sarebbe più semplice semplicemente scrivere:

window.pubsubz = pubsubz; 
+0

Anche lui usa undef anche se non è necessario .. – jantimon

risposta

2

Sì, in questo caso, perché getPubSubz si chiama in un solo posto, subito dopo aver dichiarato che, potrebbe tranquillamente essere inline.

È difficile dire esattamente ciò che l'autore aveva in mente, ma in una base di codice crescente potrebbe esserci qualche valore per avere una funzione "getter" che potrebbe essere modificata se l'atto di ottenere l'oggetto pubsubz richiedesse una logica più avanzata .

+0

Potresti dare un esempio concreto di come sarà utile? In altre lingue getter e setter sono usati per l'incapsulamento ma in questo caso non vedo il vantaggio. – Hazaart

+0

@Hazaart: se il codice cresce per accedere all'oggetto 'pubsubz' da molti posti diversi, e poi un giorno ti rendi conto che vuoi usare una diversa istanza di' pubSubz' a seconda dello stato di una variabile di commutazione, sarebbe bello solo bisogno di cambiare l'implementazione del metodo 'getPubSubz', piuttosto che tutto ciò che sta accedendo. Naturalmente, in tal caso, sarebbe imprudente esporre l'oggetto come variabile globale. Come ho già detto, è difficile sapere che cosa avesse in mente l'autore. – StriplingWarrior

2

Sarebbe assolutamente.

Ci sono solo due possibili motivi per cui un getter potrebbe venire utilizzata in questo caso:

  1. prima c'era un pezzo di codice all'interno del getter (logging, forse) solo seguendo le buone pratiche
  2. Addy di Osmani * e includendo un getter, anche aggiungendo l'opportunità di aggiungere codice addizionale in futuro.

Attraverso il potere di GitHub, possiamo realmente eliminate option one, come il getter è stato aggiunto nel suo attuale stato quindi penso che possiamo definitivamente dire che è solo una questione di buona pratica qui.

* come jantimon allude ai commenti qui sotto, questo non è particolarmente vantaggioso nella maggior parte dei casi (incluso questo) e questo codice non deve necessariamente essere seguito come un esempio.

+0

In quale libro è una buona pratica? – jantimon

+0

@jantimon bene, non è particolarmente vantaggioso per JS, mi hai preso. Forse solo vecchie abitudini dalle lingue dove è buona pratica :) –

Problemi correlati