2009-07-09 11 views
12

Ricevo un "Oggetto non supporta questa proprietà o errore di metodo", qualcuno sa perché?Javascript toSource() metodo non funzionante

Io ho dei valori collegati userId, fname, lname, ONAME, sam, hasaccess

function Employee(id, fname, lname, oname, sam, access) { 
    this.id = id; 
    this.fname = fname; 
    this.lname = lname; 
    this.oname = oname 
    this.sam = sam; 
    this.access = access; 
} 

var emp = new Employee(userId, fname, lname, oname, sam, hasAccess); 

var jsonstuff = emp.toSource(); //Breaking here 

Anche se questo link dice la sua possibile http://www.w3schools.com/jsref/jsref_toSource_date.asp

risposta

19

toSource() non funziona in Internet Explorer o Safari. È solo Gecko. Vedi Implementing Mozilla's toSource() method in Internet Explorer per le alternative.

+8

+1 per menzionare Safari! Il mondo del browser non è solo Firefox e IE. –

+0

@Vince: Se il tuo capo è incompetente, prova a spiegargli che accertarsi che funzioni fuori da IE e FF comporterà meno interventi di manutenzione la prossima volta che IE verrà aggiornato. Inoltre renderà gli utenti IE e FF meno seccati con la tua azienda quando navigano sul sito dal loro cellulare (indipendentemente dal fatto che si tratti di un iPhone, un Nokia o qualcos'altro senza IE). – Fredrik

+0

Non dimenticare che Chrome sta davvero entrando in campo. Lasciando Safari + Chrome + Opera a parte, potresti lasciare il 15% della quota (a seconda del mercato del tuo sito web). Come un esempio, vedi: http://www.w3schools.com/browsers/browsers_stats.asp – lepe

8

Provare a usare un JSON serializer invece. toSource è specifico di Mozilla e non è supportato da IE.

Se si esegue il debug, la soluzione migliore è install Firebug e utilizzare console.dir (emp); per stampare il contenuto di un oggetto nella finestra della console.

Aggiornamento: basta notare che sul link you posted si dice "Nota: questo metodo non funziona in Internet Explorer!" E sul MDC page dice "Non standard".

+0

Oops! scusate ragazzi non l'ho visto che –

+0

Ci sono 5 diverse implementazioni di JSON Serializer da quel collegamento GitHub. Puoi dare un esempio alternativo di questo codice: alert (obj.toSource()) – MacGyver

+3

Prova 'alert (JSON.stringify (obj))' – Prestaul

4

È possibile chiamare toString invece, o mettere in una condizione come questa ...

var jsonstuff = (emp.toSource) ? emp.toSource() : emp.toString(); 

EDIT:

Dal momento che questo non funziona per voi, si potrebbe desiderare di utilizzare JSON.stringify()

2

Mentre non è consigliabile (per estendere nativi JS Objects) , durante lo sviluppo è possibile utilizzare:

Object.prototype.toSource 
    || (Object.prototype.toSource = function(){return JSON.stringify(this);}) 

c = {a:100} 
//>Object 
c.toSource() 
//>"{"a":100}" 

evviva!

+0

E le funzioni e così via? –

Problemi correlati