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

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

Я использую CoffeeScript (+ jQuery), и это пример класса, где я получаю значение 3 в переменной @test. Но этого не происходит, можете ли вы мне помочь?Переменная класса CoffeeScript

+0

Конструктор ничего не может вернуть. Экземпляр класса всегда возвращается, когда вы создаете экземпляр класса. Не имеет никакого отношения к вашему вопросу, но я думал, что должен сообщить вам. – Sandro

+0

Исправление для других, читающих вдоль ... конструкторов * абсолютно может * возвращать значения; они просто должны возвращать * объект * (т. е. не примитивные значения, такие как числа или строки). (См .: http://es5.github.io/#x13.2.2, шаги 9 и 10.) – ELLIOTTCABLE

ответ

3

Это проблема обзорная: $.each принимает функцию, которая имеет это по размаху, таким образом, ваша this переменный не один вы ожидали.

Рабочий код:

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

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

Что изменилось? Проверьте стрелку на вызове $.each, теперь это толстая стрелка. Жирные стрелки делают трюк, устанавливая эту переменную и используя ее, когда вы используете @..., делая область видимости той, которую вы ожидали.

Отметьте http://coffeescript.org в разделе «Функциональное связывание» для получения более подробной информации!

Смежные вопросы