在下面这段代码中,我创建了一个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'
答案 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