2012-07-06 21 views
6

così ive dirottato la funzione di consoleConsole restituisce il valore undefined

var log = Function.prototype.bind.call(console.log, console); 
console.log = function (a) { 
    log.call(console, a); 
    submitmsg("Log", a); 
}; 

questo ha l'effetto desiderato tuttavia restituisce anche "indefinito" come un bonus inaspettato

Non riesco a capire il motivo per il quale mi porta a pensare che ci è qualcosa di leggermente sbagliato qui

enter image description here

Ciao mondo è generata da log.call(console, a) come previsto

submitmsg() è la mia funzione personalizzata

questo sta funzionando esattamente come voglio, come ho detto se im un po 'preoccupato del fatto che è anche tornando "indefinito" per ragioni che non capisco.


Nota: Il seguente codice è stato pubblicato dal PO come una risposta alla domanda. I commenti sulla risposta sono stati spostati nei commenti sulla domanda.


Quindi il codice corretto dovrebbe essere il seguente?

var log = Function.prototype.bind.call(console.log, console); 
console.log = function (a) { 
    return log.call(console, a); 
    submitmsg("Log", a) 
}; 
+0

questo ancora restituisce anche "indefinito" – Fibrewire

+0

Questo perché 'log.call' restituisce' undefined'. Ecco perché non sono sicuro di cosa stai cercando di ottenere ... la console nativa.il metodo log' restituisce 'undefined'. Cosa vuoi tornare? –

+0

scusa se ho inviato nuovamente la richiesta in modo più dettagliato – Fibrewire

risposta

10

Se ho capito correttamente la tua domanda, è perché non stai restituendo esplicitamente qualcosa dalla funzione. Quando non si restituisce un valore da una funzione, viene restituito implicitamente undefined.

Ad esempio:

function example() {} 
console.log(example()); //undefined 

Questo è definito nelle [[Call]] internal method specification (punti rilevanti in grassetto):

  1. Sia funcCtx essere il risultato di creare un nuovo contesto di esecuzione per il codice funzione utilizzando il valore della proprietà interna F [[FormalParameters]] , gli argomenti passati List args e il valore come descritto in 10.4.3.
  2. Sia il risultato sia il risultato della valutazione di FunctionBody che è il valore della proprietà interna di [[Code]] di F. Se F non ha una proprietà interna [[Codice]] o se il suo valore è un FunctionBody vuoto, il risultato è (normale, indefinito, vuoto).
  3. Uscire dal contesto di esecuzione funcCtx, ripristinando il contesto di esecuzione precedente.
  4. Se result.type viene lanciato, lanciare result.value.
  5. Se restituisce result.type, restituire result.value.
  6. In caso contrario, il tipo di risultato deve essere normale. Ritorno non definito.
+0

Ciao James, ho iniziato lì, tuttavia quella funzionalità ha la precedenza sull'output della console aggiungilo, anche se la tua risposta è corretta, non verrebbe effettivamente inviata alla console – Fibrewire

+0

@Fibrewire - Che cosa ti aspetti di ricevere? Il metodo nativo 'console.log' restituisce' undefined', quindi non vedo il problema. –

Problemi correlati