2013-01-31 105 views
8

में "सुपरक्लास" कन्स्ट्रक्टर को आमंत्रित करें, मैं अभी जावास्क्रिप्ट में आया हूं और मैं अपने ऑब्जेक्ट उन्मुख व्यवहार से परेशान हूं। मैं सिर्फ x, y सदस्यों के साथ एक वर्ग Point2D बना सकते हैं और x, y, z सदस्यों के साथ एक Point3D वर्ग के साथ यह विस्तार करने के लिए कोशिश कर रहा था।जावास्क्रिप्ट

class Point2D 
{ 
    int x, y; 
    public Point2D(int x, int y) { this.x = x; this.y = y; } 
} 
class Point3D : Point2D 
{ 
    int z; 
    public Point3D(int x, int y, int z) : base(x, y) { this.z = z; } 
} 

मैं सामान का एक बहुत पढ़ा है, लेकिन मैं वास्तव में लगता है मैं क्या देख रहा हूँ नहीं है: व्यवहार मैं प्राप्त करने के लिए कोशिश कर रहा हूँ की तरह है, चलो यह कहना सी # में जाने कुछ है। यहाँ क्या मैं अब तक के लिए आए हैं:

function Point2D(x, y) { this.x = x; this.y = y; } 
Point2D.prototype.constructor = Point2D; 
function Point3D(x, y, z) { Point2D.prototype.constructor.call(this); this.z = z; } 
Point3D.prototype = new A(); // see latter explanation 
Point3D.prototype.constructor = B; 
var p = new Point3D(10, 20, 30); 

कौन सा स्पष्ट रूप से गलत है।

अब, मैं जानता हूँ कि मैं Point3D.prototype = new A(x, y) की तरह कुछ करना चाहिए, लेकिन मैं तयx, y निर्देशांक और चर z के साथ एक प्रोटोटाइप बनाने के लिए नहीं करना चाहती। यह बहुत आसान होना चाहिए, लेकिन मुझे यह नहीं मिल रहा है, मैं सुपरक्लास कन्स्ट्रक्टर को कॉल करने या इसे ठीक से व्यवहार करने के लिए प्रतीत नहीं कर सकता।

उत्तर

13

जावास्क्रिप्ट की प्रोटोटाइप विरासत आप जिस प्रकार के पॉलीमोर्फिक रचनाकारों की तलाश में हैं, उन्हें करने के लिए कुछ अलग-अलग लचीला तरीके प्रदान करती है। अपने विशेष उदाहरण में, आप कुछ इस तरह हैं:

function Point2D(x, y) { 
    this.x = x; 
    this.y = y; 
} 

function Point3D(x, y, z) { 
    Point2D.call(this, x, y); 
    this.z = z; 
} 

स्पष्ट prototype पर constructor स्थापित करने के साथ गड़बड़ यहाँ सख्ती से आवश्यक नहीं है। (यह वास्तव में केवल तब आवश्यक है जब आप प्रोटोटाइप "सभी को एक साथ" बना रहे हों - उदाहरण के लिए, किसी ऑब्जेक्ट के साथ।)

ऑब्जेक्ट-उन्मुख जावास्क्रिप्ट की विस्तृत चर्चा के लिए, मैं निकोलस जाकस के सिद्धांतों की सिफारिश करता हूं जावास्क्रिप्ट (ईबुक) में ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग या अपनी अन्य पुस्तक, वेब डेवलपर्स के लिए पेशेवर जावास्क्रिप्ट में प्रोटोटाइप और विरासत की चर्चा।

+0

आपको बहुत धन्यवाद, मैं पागल हो रहा था और यह इतना आसान था! मैं निश्चित रूप से उन पुस्तकों में से कम से कम एक को पढ़ूंगा। – Cancer