ฉันต้องการเขียนคลาสผู้ช่วยแบบคงที่ในกาแฟ เป็นไปได้หรือไม่
ชั้น:
class Box2DUtility
constructor: () ->
drawWorld: (world, context) ->
ใช้:
Box2DUtility.drawWorld(w,c);
ฉันต้องการเขียนคลาสผู้ช่วยแบบคงที่ในกาแฟ เป็นไปได้หรือไม่
ชั้น:
class Box2DUtility
constructor: () ->
drawWorld: (world, context) ->
ใช้:
Box2DUtility.drawWorld(w,c);
คำตอบ:
คุณสามารถกำหนดเมธอดคลาสโดยนำหน้าด้วย@
:
class Box2DUtility
constructor: () ->
@drawWorld: (world, context) -> alert 'World drawn!'
# And then draw your world...
Box2DUtility.drawWorld()
การสาธิต: http://jsfiddle.net/ambiguous/5yPh7/
และถ้าคุณต้องการให้คุณdrawWorld
ทำตัวเหมือนตัวสร้างคุณสามารถพูดได้new @
ดังนี้:
class Box2DUtility
constructor: (s) -> @s = s
m: () -> alert "instance method called: #{@s}"
@drawWorld: (s) -> new @ s
Box2DUtility.drawWorld('pancakes').m()
การสาธิต: http://jsfiddle.net/ambiguous/bjPds/1/
this
เช่นกันนั่นเป็นเพียงวิธีการทำงานของ JavaScript ดังนั้นคุณจึงไม่สามารถทำอะไรได้เลย เราไม่มีคลาสทั้งอ็อบเจกต์ต้นแบบและฟังก์ชันคอนสตรัคเตอร์ดังนั้นคำศัพท์จึงสับสนมากขึ้น การแนบฟังก์ชันเป็นคุณสมบัติของฟังก์ชันตัวสร้าง (ซึ่งเป็นสิ่งที่เกิดขึ้นที่นี่) นั้นใกล้เคียงที่สุดกับเมธอดคลาสที่เรามี ตรวจสอบว่า JavaScript Box2DUtility::drawWorld
ไม่ทำงาน
constructor: (@s) ->
ทำงานในตัวอย่างที่สองด้วยหรือไม่ (กล่าวคือแทนการกำหนดด้วยตนเอง@s = s
)