流星全球'这'似乎未定义

时间:2013-04-07 15:14:05

标签: coffeescript meteor

我正试图在Meteor项目中分析我日益庞大的单个CoffeeScript文件,并使用this跟踪official advice关于范围全局变量的问题。然而,即使是简单的事情:

console.log("this=" + this)
@gave =
  Transactions: new Meteor.Collection("Transactions")
  Causes: new Meteor.Collection("Causes")

生成终端错误,服务器无法启动:

=> Meteor server restarted
this=undefined

/home/g/workspace/gave/.meteor/local/build/server/server.js:321
}).run();
 ^
TypeError: Cannot set property 'gave' of undefined
    at app/gave.coffee.js:6:11

根据上面提到的建议,

  

可以使用此(或Cof​​feeScript的@速记)在CoffeeScript中设置全局变量,因为在顶层,它指的是全局命名空间(客户端上的窗口和服务器上的全局窗口)。

所以,我无法弄清楚我哪里出错了。你能? :)

1 个答案:

答案 0 :(得分:2)

请参阅ES5 - 15.3.4.4

  

注意thisArg值未经修改就会传递   值。这是对版本3的更改,其中未定义或为null   thisArg将替换为全局对象并应用ToObject   所有其他值和结果将作为此值传递。

因此,使用"use strict",meteor .call(null)将有效地为您提供this == null =)。