为啥 coffescript 创建这个闭包 [重复]
Posted
技术标签:
【中文标题】为啥 coffescript 创建这个闭包 [重复]【英文标题】:Why is coffescript creating this closure [duplicate]为什么 coffescript 创建这个闭包 [重复] 【发布时间】:2016-04-28 04:46:26 【问题描述】:我正在学习 CoffeeScript 我有这个代码:
class Person
constructor: (@firstName, @lastName) ->
sayHi: () ->
return "Hi, I'm #@firstName #@lastName"
并且正在生成这个 javascript 代码:
// Generated by CoffeeScript 1.10.0
(function()
var Person;
Person = (function()
function Person(firstName, lastName)
this.firstName = firstName;
this.lastName = lastName;
Person.prototype.sayHi = function()
return "Hi, I'm " + this.firstName + " " + this.lastName;
;
return Person;
)();
).call(this);
我想创建 class
的实例,但由于它在闭包内,我不能这样做?
【问题讨论】:
你应该提到你正在使用node.js
?
我没有使用node
。只是npm
用于安装一些软件包,但它现在只是前端应用程序
我想对此运行 jasmine 测试,但是当我 require
js 文件时,Person 未定义,因为它在闭包中
***.com/questions/4214731/…
【参考方案1】:
@
运算符(与 this
相同)是一个稍微不那么骇人听闻的选项。在浏览器环境中,this
会指向window
,在node.js
中,会指向exports
。
class @Person
constructor: (@firstName, @lastName) ->
sayHi: () ->
return "Hi, I'm #@firstName #@lastName"
window.Person
仅适用于浏览器,@
将适用于节点和浏览器。见https://***.com/a/24352630/227299
或者,您可以使用 -b
(--bare)
选项运行 coffescript,并且不会创建包装函数。
【讨论】:
【参考方案2】:更改一个类的位声明
class window.Person
constructor: (@firstName, @lastName) ->
sayHi: () ->
return "Hi, I'm #@firstName #@lastName"
【讨论】:
这是让它在coffee
中工作的正确方法吗?以上是关于为啥 coffescript 创建这个闭包 [重复]的主要内容,如果未能解决你的问题,请参考以下文章