2017-03-08 7 views
35

की आवश्यकता होती है तो अब तक के साथ, मैं नीचे दिए तरीक़े node.js में वर्गों और मॉड्यूल बनाया है बस इस तरह:Node.js ES6 कक्षाएं

class Animal{ 

constructor(name){ 
    this.name = name ; 
} 

print(){ 
    console.log('Name is :'+ this.name); 
} 
} 

अब, सबसे पहले, मुझे यह पसंद है :) लेकिन यह एक सवाल उठाता है। आप इसे node.js की मॉड्यूल संरचना के साथ संयुक्त कैसे उपयोग करते हैं?

आप एक वर्ग है, जहां आप प्रदर्शन के लिए एक मॉड्यूल का उपयोग करना चाहते हैं कहो आप fs

उपयोग करें ताकि आप अपनी फ़ाइल बनाने इच्छा कहते हैं:


Animal.js

var fs = require('fs'); 
class Animal{ 

constructor(name){ 
    this.name = name ; 
} 

print(){ 
    console.log('Name is :'+ this.name); 
} 
} 

क्या यह सही तरीका होगा?

इसके अलावा, आप इस कक्षा को मेरे नोड प्रोजेक्ट के भीतर अन्य फ़ाइलों में कैसे बेनकाब करते हैं? और यदि आप इसे एक अलग फ़ाइल में उपयोग कर रहे हैं तो क्या आप अभी भी इस कक्षा को विस्तारित कर पाएंगे?

मुझे आशा है कि आप में से कुछ इन सवालों :)

+1

बस ES6 क्लास नाम का इलाज करें जैसा कि आपने ईएस 5 तरीके में कन्स्ट्रक्टर नाम का इलाज किया होगा। वे एक ही हैं। ईएस 6 सिंटैक्स सिर्फ सिंटैक्टिक चीनी है और बिल्कुल उसी अंतर्निहित प्रोटोटाइप, कन्स्ट्रक्टर फ़ंक्शन और ऑब्जेक्ट्स बनाता है। – jfriend00

+0

आईआईएफई जो आपके 'पशु मॉड्यूल' बनाता है वह नोड मॉड्यूल में बहुत व्यर्थ है जिसका वैसे भी अपना मॉड्यूल स्कोप है। – Bergi

उत्तर

42

हाँ जवाब देने में सक्षम हो जाएगा, अपने उदाहरण ठीक काम करेगा।

class Animal {...} 
module.exports = Animal; 

या कम:

module.exports = class Animal { 

}; 

एक बार एक और मॉड्यूल में आयात किया है, तो आप इसे के रूप में इलाज कर सकते हैं

अपनी कक्षाओं को उजागर के रूप में, आप कुछ और की तरह एक वर्ग export कर सकते हैं अगर इसे उस फ़ाइल में परिभाषित किया गया था:

var Animal = require('./Animal'); 

class Cat extends Animal { 
    ... 
} 
+4

आप मॉड्यूल.एक्सपोर्ट = क्लास एनिमल {} – Paul

+0

जैसे कुछ भी कर सकते हैं जो सच है, मैं भूल रहा हूं कि आप असाइनमेंट के दौरान चीजों का नाम दे सकते हैं। – rossipedia

+0

यह कोड शैली और स्पष्टता के लिए नीचे आता है। 'module.exports' आमतौर पर एक अज्ञात निर्यात के लिए उपयोग किया जाता है, जबकि नाम निर्यात के लिए 'निर्यात' का उपयोग किया जाता है। यह एक मूल कोडिंग सौजन्य है (आप कह सकते हैं), जो दूसरों को आपकी कक्षा, मॉड्यूल एट अल और कैटरिया को आयात करने के तरीके के बारे में जानने में सहायता कर सकता है। –

0

फिर से ES6 तरीका quire import है। आप export अपनी कक्षा कर सकते हैं और इसे import { ClassName } from 'path/to/ClassName' सिंटैक्स का उपयोग करके कहीं और आयात कर सकते हैं।

import fs from 'fs'; 
export default class Animal { 

    constructor(name){ 
    this.name = name ; 
    } 

    print(){ 
    console.log('Name is :'+ this.name); 
    } 
} 

import Animal from 'path/to/Animal.js'; 
+0

यह स्पष्ट करना अच्छा होगा कि यह एक विकल्प है, लेकिन आवश्यकता नहीं है। यह ईएस 6 मॉड्यूल सिंटैक्स है, लेकिन आप अभी भी नोड के सामान्य कॉमनजेएस निर्यात के साथ एक ईएस 6 कक्षा का उपयोग कर सकते हैं। कक्षाओं के साथ ES6 निर्यात वाक्यविन्यास का उपयोग करने की कोई आवश्यकता नहीं है। इसे 'ईएस 6 रास्ता' कहकर कुछ भ्रामक है। – loganfsmyth

+0

यह सच है, यह एक व्यक्तिगत वरीयता है। निजी तौर पर, मैं सिंटैक्स स्थिरता के लिए केवल 'आवश्यकता' पर 'आयात' का उपयोग करता हूं। –

+0

हाँ यह एक ठोस दृष्टिकोण है और मैं यह भी करता हूं, बस ध्यान रखें कि जिस तरह से बेबेल का 'आयात' कॉमनजेएस मॉड्यूल के साथ इंटरऑपरेट करता है, वह संभावना नहीं है कि नोड में काम खत्म हो जाएगा, इसलिए भविष्य में कोड परिवर्तनों को संगत होने की आवश्यकता हो सकती है बेबेल के बिना नोड के साथ। – loganfsmyth

2

बस ES6 वर्ग के नाम एक ही इलाज के रूप में आप ES5 तरह से निर्माता नाम का इलाज किया जाएगा। वे एक ही हैं।

ईएस 6 सिंटैक्स सिर्फ सिंटैक्टिक चीनी है और बिल्कुल उसी अंतर्निहित प्रोटोटाइप, कन्स्ट्रक्टर फ़ंक्शन और ऑब्जेक्ट्स बनाता है।

तो, के साथ अपने ES6 उदाहरण में:

class Animal { 
    ... 
} 

var a = new Animal(); 

module.exports = {Animal: Animal}; 

तुम बस Animal अपने वस्तु के निर्माता (समान के रूप में आप ES5 में किया होता) की तरह व्यवहार कर सकते हैं। आप निर्माता को निर्यात कर सकते हैं। आप new Animal() के साथ निर्माता को कॉल कर सकते हैं। इसका उपयोग करने के लिए सबकुछ समान है। केवल घोषणा वाक्यविन्यास अलग है। अभी भी एक Animal.prototype है जिसमें आपके सभी तरीके हैं।ES6 तरीका वास्तव में एक ही कोडिंग परिणाम बनाता है, केवल fancier/nicer वाक्यविन्यास के साथ।