Kahve dosyasında statik sınıflar ve yöntemler


86

Kahve kağıdına statik bir yardımcı sınıf yazmak istiyorum. Mümkün mü?

sınıf:

class Box2DUtility

  constructor: () ->

  drawWorld: (world, context) ->

kullanma:

Box2DUtility.drawWorld(w,c);

Yanıtlar:


179

Sınıf yöntemlerini önek olarak tanımlayabilirsiniz @:

class Box2DUtility
  constructor: () ->
  @drawWorld: (world, context) -> alert 'World drawn!'

# And then draw your world...
Box2DUtility.drawWorld()

Demo: http://jsfiddle.net/ambiguous/5yPh7/

Ve drawWorldbir kurucu gibi davranmanızı istiyorsanız, o zaman şöyle diyebilirsiniz new @:

class Box2DUtility
  constructor: (s) -> @s = s
  m: () -> alert "instance method called: #{@s}"
  @drawWorld: (s) -> new @ s

Box2DUtility.drawWorld('pancakes').m()

Demo: http://jsfiddle.net/ambiguous/bjPds/1/


4
Misiniz constructor: (@s) ->İkinci örnekte olduğu çalışacak? (yani, manuel atama yerine @s = s)
Tripp Lilley

1
@TrippLilley: Evet, isterseniz bu şekilde yapabilirsiniz.
mu çok kısa

Ama yöntemleri 'buna' koyarsak, artık gerçekten statik olmayacaklar, değil mi? Gerçekten statik yöntemler obj.prototype içinde kalmalıdır. Shawn Mclean örneğinde bunun gibi yöntemleri çağırabiliriz: Box2DUtility :: drawWorld (w, c);
Sergei Panfilov

1
@SergeyPanfilov: Ancak prototipteki herhangi bir şey aracılığıyla da erişilebilir this, JavaScript böyle çalışır, bu yüzden bu konuda hiçbir şey yapamazsınız. Bizim de sınıflarımız yok, sadece nesneler, prototipler ve yapıcı işlevleri, bu yüzden terminoloji daha da karışık. Yapıcı işlevin özellikleri olarak işlevleri eklemek (burada olan şey budur), sahip olduğumuz sınıf yöntemine en yakın eşdeğerdir. JavaScript'in Box2DUtility::drawWorld çalışmayacağını kontrol edin .
mu çok kısa

1
@ AlvaroLourenço CoffeeScript sınıfının bir "statik blok" olduğunu (bazı fazladan şeyler ile) görünüyor: jsfiddle.net/ambiguous/ap72ckax
mu çok kısa
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.