स्टेटिक क्लासेस और कॉफ़ीस्क्रिप्ट में विधियाँ


86

मैं कॉफ़ीस्क्रिप्ट में एक स्थिर सहायक वर्ग लिखना चाहता हूं। क्या यह संभव है?

वर्ग:

class Box2DUtility

  constructor: () ->

  drawWorld: (world, context) ->

का उपयोग करते हुए:

Box2DUtility.drawWorld(w,c);

जवाबों:


179

आप उनके साथ उपसर्ग करके वर्ग विधियों को परिभाषित कर सकते हैं @:

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/


4
constructor: (@s) ->दूसरे उदाहरण में भी काम करेंगे ? (यानी, मैनुअल असाइनमेंट के बजाय @s = s)
ट्रिप लीली

1
@TrippLilley: यदि आप चाहें तो आप इसे इस तरह से कर सकते हैं।
मयू बहुत कम है

लेकिन अगर हम तरीकों को 'इस' में रखते हैं, तो वे वास्तव में स्थिर नहीं हैं, है न? सचमुच स्थैतिक तरीके obj.prototype में रहना चाहिए। Shawn Mclean के उदाहरण में हम इस तरह के तरीके कह सकते हैं: Box2DUtility :: drawWorld (w, c);
सर्गेई पैनफिलोव

1
@SergeyPanfilov: लेकिन प्रोटोटाइप में कुछ भी उपलब्ध है this, इसके माध्यम से ही जावास्क्रिप्ट काम करता है, इसलिए आप इसके साथ कुछ भी नहीं कर सकते। हमारे पास वास्तव में कक्षाएं नहीं हैं, बस ऑब्जेक्ट्स, प्रोटोटाइप और कंस्ट्रक्टर फ़ंक्शन हैं इसलिए शब्दावली और भी अधिक भ्रमित है। कंस्ट्रक्टर फ़ंक्शन के गुणों के रूप में कार्य करना (जो कि यहां हो रहा है) हमारे पास एक वर्ग विधि के सबसे करीब है। चेक करें जावास्क्रिप्ट Box2DUtility::drawWorld काम नहीं करेगा।
म्यू

1
@ AlvaroLourenço लगता है कि एक कॉफ़ीस्क्रिप्ट क्लास एक "स्टैटिक ब्लॉक" (कुछ अतिरिक्त सामान के साथ) है: jsfiddle.net/ambiguous/ap72ckax
म्यू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.