And*_*rew 10 instance-variables coffeescript
我正在学习CoffeeScript,我有一个轻微的头痛,我还没弄清楚.如果我创建一个对象来做某些事情,我偶尔需要一个实例变量来在该方法之间共享该对象.例如,我想这样做:
testObject =
var message # <- Doesn't work in CoffeeScript.
methodOne: ->
message = "Foo!"
methodTwo: ->
alert message
Run Code Online (Sandbox Code Playgroud)
但是,您不能var在CoffeeScript中使用,并且没有该声明message仅在内部可见methodOne.那么,如何在CoffeeScript中的对象中创建实例变量?
更新:修复了我的例子中的拼写错误,所以方法实际上是方法:)
Lau*_*ren 12
你不能那样.引用语言参考:
因为您无法直接访问var关键字,所以不可能故意为外部变量设置阴影,您只能引用它.因此,如果您正在编写一个深层嵌套的函数,请注意不要意外地重用外部变量的名称.
然而,你要做的事情在JS中也是不可能的,它将等同于
testObject = {
var message;
methodOne: message = "Foo!",
methodTwo: alert(message)
}
Run Code Online (Sandbox Code Playgroud)
这是无效的JS,因为你不能在这样的对象中声明一个变量; 您需要使用函数来定义方法.例如在CoffeeScript中:
testObject =
message: ''
methodOne: ->
this.message = "Foo!"
methodTwo: ->
alert message
Run Code Online (Sandbox Code Playgroud)
您也可以使用@'this.'的快捷方式,即@message代替this.message.
或者考虑使用CoffeeScript的类语法:
class testObject
constructor: ->
@message = ''
methodOne: ->
@message = "Foo!"
methodTwo: ->
alert @message
Run Code Online (Sandbox Code Playgroud)
只是为了增加@Lauren的答案,你想要的基本上是模块模式:
testObject = do ->
message = null
methodOne = ->
message = "Foo!"
methodTwo = ->
alert message
return {
methodOne
methodTwo
}
Run Code Online (Sandbox Code Playgroud)
哪个message是"私有"变量,仅适用于这些方法.
根据上下文,您还可以在对象之前声明消息,以便它可用于两个方法(如果在此上下文中执行):
message = null
testObject =
methodOne: -> message = "Foo!"
methodTwo: -> alert message
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11043 次 |
| 最近记录: |