我正试图在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
根据上面提到的建议,
可以使用此(或CoffeeScript的@速记)在CoffeeScript中设置全局变量,因为在顶层,它指的是全局命名空间(客户端上的窗口和服务器上的全局窗口)。
所以,我无法弄清楚我哪里出错了。你能? :)
答案 0 :(得分:2)
请参阅ES5 - 15.3.4.4。
注意thisArg值未经修改就会传递 值。这是对版本3的更改,其中未定义或为null thisArg将替换为全局对象并应用ToObject 所有其他值和结果将作为此值传递。
因此,使用"use strict"
,meteor .call(null)
将有效地为您提供this == null
=)。