新手问题 CoffeeScript:关于这里的 join (' ') --《深入浅出 CoffeeScript》p55

douya0808 · 2013年05月06日 · 最后由 douya0808 回复于 2013年05月06日 · 2733 次阅读
class Tribble
   constructor:->
      @isAlive=true
      Tribble.count++

   #Prototype properties
   breed:->new Tribble if @isAlive
   die:->
      Tribble.count-- if @isAlive
      @isAlive=false

   #Class-level properties
   @count:0
   @makeTrouble:->console.log('Trouble!' for i in [0..@count]).join(' ')//here! here!

   tribble1=new Tribble
   tribble2=new Tribble
   Tribble.makeTrouble()

//here! here! 行使用的列表解析最后返回的是个数组 [ 'Trouble!', 'Trouble!', 'Trouble!' ] 然后我们将数组进行 join(' ') 操作 期望的结果是 Trouble!, Trouble!, Trouble!,但是加上.join(' ') 后程序会报错如下

[ 'Trouble!', 'Trouble!', 'Trouble!' ]
TypeError: Cannot call method 'join' of undefined
  at Function.Tribble.makeTrouble (C:\odd.coffee:14:19, <js>:38:13)
  at C:\odd.coffee:18:4, <js>:45:13
  at Object.<anonymous> (C:\odd.coffee:1:1, <js>:49:5)
  at Object.<anonymous> (C:\odd.coffee:51:4)
  at Module._compile (module.js:456:26)

有前辈看这本书的时候遇到同样的问题吗

不懂 CoffeeScript,但感觉你这个写法有问题。

console.log(xxxxxxxxxxxxx) 这个完了之后再.join(' '),问题应该出在这个上,你可以试着 join 之后再 log 一下试试。

回楼上前辈,这个问题我也注意到了 但仍然得不到书上的结果

@makeTrouble:->
   @retult='Trouble!' for i in [0..@count].join(' ')
   console.log(@retult)

列表解析会返回一个数组,数组中的每个元素都是'Trouble!' ,然后再用 join(' ') 将它们按字符串连接起来,再赋给变量@result,结果输出后只剩下一个'Trouble1'了 这回更懵了

ps:我在类方法,makeTrouble 中新建的变量@result是不是也是类变量呢?'

console.log ('Trouble!' for i in [0..@count]).join(' ') 加个空格

#3 楼 @kaka OK 了,果然的空格的问题 谢谢 哈哈哈哈哈

大哥我再问下呗 我上面如果又在@makeTrouble中定义了一个变量@result,那这个@result是类变量还是实例变量呢?

官网直接翻译成如下形式

@makeTrouble:->
      @retult
Tribble.makeTrouble = function() {
  return this.retult;
};

我感觉应该是类变量,但是这里看起来更像是实例变量

实例变量

那为什么区间 [0..@count] 中的@count就是类变量呢?难道是因为@coung声明的时候就是作为类变量声明的吗大哥

需要 登录 后方可回复, 如果你还没有账号请 注册新账号