2012-04-09 1 views
0
class Example 
    constructor: -> 
    $.each [1, 2, 3], (key, value) -> 
     @test = value 
    return @test 
    render: -> 
    alert @test 

example = new Example() 
example.render()​​​​​​​​​​​​​​​​​​​​​​ 

Ich benutze CoffeeScript (+ jQuery) und dies ist ein Klassenbeispiel, wo ich den Wert 3 in @test Variable bekommen würde. Aber das passiert nicht, kannst du mir helfen?CoffeeScript Klassenvariable

+0

Ein Konstruktor kann nichts zurückgeben. Eine Instanz der Klasse wird immer zurückgegeben, wenn Sie eine Klasse instanziieren. Hat nichts mit deiner Frage zu tun, aber ich dachte, ich sollte es dich wissen lassen. – Sandro

+0

Korrektur für andere, die mitlesen ... Konstruktoren * können absolut * Werte zurückgeben; Sie müssen einfach ein * Objekt * zurückgeben (also keine primitiven Werte wie Zahlen oder Strings.) (Siehe: http://es5.github.io/#x13.2.2, Schritte 9. und 10.) – ELLIOTTCABLE

Antwort

3

Dies ist ein Scoping-Problem: $.each eine Funktion übernimmt, die es auf Umfang hat, damit Ihre this Variable erwartet nicht diejenige, die Sie ist.

Der Arbeitscode:

class Example 
    constructor: -> 
    $.each [1, 2, 3], (key, value) => 
     @test = value 
    return @test 
    render: -> 
    alert @test 

example = new Example() 
example.render()​​​​​​​​​​​​​​​​​​​​​​ 

Was hat sich geändert? Überprüfen Sie den Pfeil auf dem $.each Aufruf, es ist jetzt ein dicker Pfeil. Fette Pfeile machen den Trick, eine _diese Variable zu setzen und sie zu verwenden, wenn Sie @... verwenden, um Ihren Bereich so zu machen, wie Sie es erwartet haben.

Überprüfen Sie http://coffeescript.org im Abschnitt "Funktionsbindung" für weitere Details!