2009-07-07 17 views
0

Ich bin neu in Javascript. Ich versuche zu verstehen, wo "dieses" mit verschiedenen Beispielen verbunden ist. Ich verwende console.log, um einige Werte wie unten gezeigt zu drucken.console.log wird nicht undefiniert gedruckt?

function FuncObject(value) { 
    this.answer = value; 
    this.get_answer = function() { 
     return this.answer; 
    } 
}; 

var f = new FuncObject(42); 

var fanswer = f.get_answer; 
console.log(fanswer()) 

console.log druckt "Funktion" statt "undefiniert". document.writeln scheint "undefined" zu drucken, was die richtige ist, weil diese an das Fensterobjekt gebunden ist, das keine Antwort hat. Jetzt verwirrt mich Druckfunktion. Jetzt frage ich mich, was ich zum Loggen benutzen soll. Ich kann keine Erklärung dafür finden.

dank

+0

Können Sie den tatsächlichen Code einfügen, den Sie verwenden? – Greg

+0

Bitte kopieren Sie Ihren Code genau so, wie er geschrieben wurde, wenn wir Ihnen helfen sollen. –

+0

Entschuldigung, ich hatte irgendwo ein anderes Protokoll (welches das selbst ausdruckt), was Verwirrung stiftete. Und console.log und document.wrwlen werden offensichtlich an verschiedenen Stellen gedruckt. Verzeihen Sie die Ignoranz des Neulings. Danke für die Zeit. –

Antwort

1

mohan Nur sofern Sie nicht bemerkt haben, gibt es ein Tippfehler in Ihrem Code geschrieben von
this.get_answer = funcition()

, die mit im Auge, ich bin nicht Ganz sicher von Ihrem Erfahrungsstand, also lassen Sie mich alle Grundlagen abdecken.

function FuncObject(value) { 
    this.answer = value; 
    this.get_answer = function() { 
    return this.answer; 
    } 
}; 

var f = new FuncObject(42); 

var fanswer = f.get_answer; 
console.log(fanswer()) 

Sie Einstellung fanswer = f.get_answer wo f.get_answer eine Funktion ist, so als solche fanswer an die Funktion Äquivalent this.get_answer setzt.

Wenn Sie den Rückgabewert von f.get_answer wollen, müssen Sie f.get_answer() nennen, die 42.

kehrt Mit dem, was Sie gesagt, console.log(fanswer())tut Druck undefined wie erwartet.
Wenn Sie einfach console.log(fanswer) tun, notiert es als Funktion, auch wie erwartet.

Ich bin mir nicht sicher, warum Sie erhalten würden Funktion wie Sie in Ihrer Frage angegeben, weil ich definitiv nicht, jsbin.

+0

Können Sie mir sagen, welche Antwort Sie bekommen? Im Versuch, zu verstehen, worauf "dieses" sich in verschiedenen Fällen bezieht, stimmen Sie zu, dass in dem obigen Beispiel, in dem ich einen Verweis auf eine Methode speichere, eine explizite Bindung unter Verwendung von call fanswer.apply (f) für " das "an" f "gebunden sein. Wenn Sie fanswer() oben nur aufrufen, sollten Sie undefined drucken. In Firefox, wenn ich document.writeln verwende, druckt es undefined und console.log druckt "function". Was vermisse ich ? –

+0

Mit dem von Ihnen bereitgestellten Code gibt 'firebug' ** function ** nicht mit 'console.log' aus und druckt ** undefined **. Ich kann den Fehler, über den Sie sprechen, nicht mit dem bereitgestellten Code reproduzieren, er scheint ordnungsgemäß zu funktionieren. –

+0

Sorry wegen der Verwirrung. Es druckt auch undefined für mich. Ich war gerade verwirrt mit einer anderen Log-Nachricht. Vielen Dank für Ihre Zeit. Ich werde versuchen, beim nächsten Mal vorsichtiger zu sein –

Verwandte Themen