CoffeeScript返回错误的原型

时间:2014-11-13 10:03:01

标签: javascript coffeescript

在下面这段代码中,我创建了一个Test对象并将其存储在一个数组中。我编写了一个方法来按名称检索测试对象并返回它,但它返回Array原型,而不是Test原型。我已经附上了下面的示例代码和一个codepen。我做错了什么,我该如何解决它。

class TestHandler
    constuctor: ->

    testList: []

    addTest: (test) ->
      @testList.push test

    getTestList: ->
      @testList

    getTestForName: (name) ->
      for e in @getTestList() when e.getName() is name
        e

class Test
  constructor: (name) ->
    @name = name

  getName: ->
    @name

testHandler = new TestHandler()
testHandler.addTest new Test 'hi'


console.log testHandler.getTestForName 'hi'

Codepen:http://codepen.io/anon/pen/EaxyrX

2 个答案:

答案 0 :(得分:2)

你没有返回实际的对象而是列表理解,你需要从列表中理解返回

getTestForName: (name) ->
    for e in @getTestList() when e.getName() is name
        return e

答案 1 :(得分:0)

当函数体的最后一个语句是for循环时,coffeescript将整个循环作为返回值。实际上,在coffeescript中,for循环本身就是一个值,该元素的元素是for体中的最后一行。所以你可以做这样的事情

x = for i in [0...3]
  console.log('i is', i);
  3 * i

x设置为[0, 3, 6]。同样,如果我们有

f = ->
  for i in [0...3]
    3 * i

然后f()将返回[0, 3, 6]。一个简单的解决方法就是

getTestForName: (name) ->
  for e in @getTestList() when e.getName() is name
    return e