【发布时间】:2015-02-23 17:59:42
【问题描述】:
以下代码定义了两个函数lines 和circles,它们分别返回一个函数f 和g。函数f 和g 相等(() -> size)只是为了简单起见,但通常它们是变量size 的不同函数。
lines = () ->
size = 10 # default value
f = () -> size
f.size = (_) ->
size = _
f
f
circles = () ->
size = 15 # default value
g = () -> size
g.size = (_) ->
size = _
g
g
在控制台上,上面的代码产生了以下模式,这是我需要的:
> lines()() # 10
> lines().size(20)() # 20
> circles()() # 15
> circles().size(30)() #30
您可能注意到,f.size 和 g.size 方法是闭包,它们在 lines 和 circles 上是相同的。那么我的问题是:如何避免重复 size 方法的代码?(使用咖啡脚本或 javascript)
我尝试了不同的解决方案,但我没有找到正确的方法。为了复制闭包,size 方法中的size 变量应该引用在lines 的第一行定义的size 变量(circles 也是如此)。
【问题讨论】:
-
你不能;私有构造函数变量的方法闭包必须发生在构造函数中。如果你将
_size公开,你可以使用原型方法来达到它。