2010-11-11 5 views
3

Pouvez-vous résoudre ce problème sans vous tromper? La réponse est un one-liner. C'est d'un affichage d'emploi mort, la réponse a été demandée dans la réponse. Je pensais que c'était une façon intelligente d'éliminer les répondants, mais je n'arrive pas à y répondre sans avoir aussi une erreur.Javascript Puzzle - One Liner

La solution évidente:

f.moo(alert(f.foo)); 

Mais qui jette TypeError: callback is undefined { message="callback is undefined", more...}

var f = (function(){ 
    return { 
    foo : "bar", 
    moo : function(callback){ 
     callback.call(this) 
    } 
    } 
})(); 
//alert "bar" by foo 
+1

Quel est le puzzle? Ou, qu'est-ce que "alerte" barre "par nous" veut dire? – Pointy

+0

@Bonnie Pour commencer, le code manque un point-virgule ... –

+0

Šime Vidas: Seul Douglas Crockford et Chuck Norris seront fâchés contre vous – Harmen

Répondre

10

Vous devez passer une fonction à f.moo. Vous appelez alert et passez le résultat de alert (ce qui n'est rien) à la place.

f.moo(function() { alert(this.foo); }); 
+1

Je suppose que cela devrait être «ceci». – SLaks

+0

@SLaks - Vous avez commenté comme j'ai fait cette modification. Il devrait en effet être «this.foo» pas «f.foo». – VoteyDisciple

+0

Était trop tard avec ma réponse, qui était exactement la même :) +1 –

2

Uhm ...

alert(f.foo); 

Ou avez-vous oublié de mentionner une exigence?

+2

Je crois que le commenté ligne en bas ("barre d'alerte" par nous ") est incomplète. Il a probablement dit quelque chose comme "barre d'alerte" en utilisant f.moo "ou quelque chose comme ça. –

+1

Probablement. Mais lorsqu'on me pose des questions comme celle-ci, * surtout * dans une interview, j'argumente toujours la sémantique. Ils devraient savoir mieux que de poser des questions à demi-assed ... :) – cdhowie

+0

Peut-être qu'ils essayaient d'écarter les gens qui supposent que la solution la plus complexe est souhaitée, au lieu de l'évidence et simple qui a été demandé. : o) – user113716

Questions connexes