2012-05-27 15 views
6

मुझे अपनी कक्षा को मेरी node.js फ़ाइल में काम करने की कोशिश करने में परेशानी हो रही है। जब मुझे मॉड्यूल की आवश्यकता होती है, तो मुझे './module' की आवश्यकता होती है जो मेरे कन्स्ट्रक्टर को कॉल करता है और एक त्रुटि देता है। लेकिन मैं वास्तव में फ़ाइल में बाद में तुरंत चालू करना चाहता हूं।कॉफ़ीस्क्रिप्ट और node.js भ्रम। तत्काल वर्ग की आवश्यकता है?

यानी

class Mic 

constructor: (x) -> 
    @t = [] 
    @t.push x 

exports.Mic = Mic 

और यहाँ मेरी app.coffee फ़ाइल

require 'coffee-script' 
require './Mic' 

जब मैं app.coffee चलाने यह एक अपवाद ReferenceError देता है: एक्स परिभाषित नहीं है। जो कन्स्ट्रक्टर को बुलाए जाने के बाद समझ में आता है, लेकिन यह कन्स्ट्रक्टर को क्यों बुला रहा है, भले ही मैंने नया माइक कहा हो?

संपादित

Mic = require './Mic' 

m = new Mic 3 
console.log m 

को खरोज

class Mic 
    constructor: (x) -> 
     @t = [] 
     @t.push x 

exports.Mic = Mic 

फिक्सिंग और मेरे app.coffee अद्यतन करने के बाद मैं त्रुटि मिलती है

TypeError: object is not a function 
    at Object.CALL_NON_FUNCTION_AS_CONSTRUCTOR (native) 

उत्तर

17

पहली बात का पहला: आप डॉनकी आवश्यकता नहीं है-coffee के साथ इसे चलाना पर्याप्त है; संकलित जावास्क्रिप्ट चलाने के समान। आपको अपने कार्यक्रम में रनटाइम पर उपलब्ध कॉफीस्क्रिप्ट लाइब्रेरी की आवश्यकता नहीं है।

दूसरा, पहली फ़ाइल गलत तरीके से इंडेंट दिखाई देती है; अगर आपको लगता है कि Mic के निर्माता बनना चाहता हूँ, यह class नीचे एक स्तर, यानी .:

class Mic 
    constructor: (x) -> 
    @t = [] 
    @t.push x 

exports.Mic = Mic 

अंत में, मुद्दा यह है कि exports निर्यात का एक वस्तु है इंडेंट। यहाँ देखें:

exports.Mic = Mic 

आप exports वस्तु की Mic कुंजी को Mic निर्दिष्ट किया है, इसलिए अब Mic.coffee में exports इस तरह दिखता है:

{ Mic: ...your class... } 

जब आप कहते हैं कि require './Mic', आपको लगता है कि हो रही है वस्तु वापस; दूसरे शब्दों में:

require('./Mic') == { Mic: ...your class... } 

तो तुम निम्न में से एक कार्य करना होगा:

  1. निर्यात Mic माइक के पूरे निर्यात के रूप में।कॉफी, और नहीं एक कुंजी के रूप:

    module.exports = Mic 
    
  2. पूरे मॉड्यूल हट जाओ, और फिर भीतर Mic वस्तु का दृष्टांत:

    mic = require './Mic' 
    m = new mic.Mic 3 
    
  3. बस require 'घ मॉड्यूल से बाहर Mic ले:

    {Mic} = require './Mic' # equivalent to saying Mic = require('./Mic').Mic 
    m = new Mic 3 
    
+0

अरे, उफ़ मैं डिश डब्ल्यू को बदलने के लिए भूल गया ith माइक यह एक प्रतिलिपि और पेस्ट समस्या थी। मैंने अपना कोड इंडेंट किया है और अब मुझे टाइप एरर मिल रहा है: ऑब्जेक्ट ऑब्जेक्ट .CALL_NON_FUNCTION_AS_CONSTRUCTOR पर कोई फ़ंक्शन नहीं है। कोड तब तक स्वचालित नहीं होता जब तक कि मैं mic = new mic 3 को कॉल करता हूं, तब पिछली त्रुटि देता है। –

+0

उत्तर के अनुसार अद्यतन किया गया। – Ashe

+0

आह वहाँ हम जाते हैं। धन्यवाद, वह दांव चल गया! –

संबंधित मुद्दे