0

我试图在我的 Meteor 项目中排除我越来越大的单个 CoffeeScript 文件,并遵循了关于使用this. 但是,即使是简单的事情,例如:

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

根据上面链接的建议,

全局变量可以通过使用 this(或 CoffeeScript 的 @ 简写)在 CoffeeScript 中设置,因为在顶层 this 指的是全局命名空间(客户端上的窗口和服务器上的全局)。

所以,我真的不知道我要去哪里错了。你可以吗?:)

4

1 回答 1

2

参见ES5-15.3.4.4

注意 thisArg 值作为 this 值不加修改地传递。这是对第 3 版的更改,其中 undefined 或 null thisArg 被替换为全局对象,并且 ToObject 应用于所有其他值,并且该结果作为 this 值传递。

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

于 2013-04-07T19:00:57.170 回答