javascript questions एक "वर्ग" बनाने के लिए आप किस शैली का उपयोग करते हैं?




javascript programs (6)

जावास्क्रिप्ट में कोई कक्षाएं नहीं हैं

वहाँ वस्तुएं हैं हालांकि जावास्क्रिप्ट में ऑब्जेक्ट बनाने के लिए आपको एक क्लास की आवश्यकता नहीं है। इसमें कंस्ट्रक्टर फ़ंक्शंस होते हैं, उदाहरण के लिए आप नए के साथ इन्हें जोड़ सकते हैं:

var james = new Person();

आप वर्ग के व्यवहार के साथ अनुकरण कर सकते हैं:

प्रोटोटाइप उदाहरण:

function Car (type) {
    this.type = type;
    this.color = "red";
}

Car.prototype.getInfo = function() {
    return this.color + ' ' + this.type + ' car';
};

वस्तु का शाब्दिक उदाहरण

var car = {
    type: "honda",
    color: "red",
    getInfo: function () {
        return this.color + ' ' + this.type + ' car';
    }
}

जावास्क्रिप्ट में कक्षा-समान व्यवहार प्राप्त करने के कुछ तरीके हैं, सबसे आम प्रोटोटाइप इस तरह आधारित हैं:

function Vector(x, y, x) {
    this.x = x;
    this.y = y;
    this.z = z;
    return this;
}

Vector.prototype.length = function () { return Math.sqrt(this.x * this.x ... ); }

और समापन आधारित दृष्टिकोण के समान

function Vector(x, y, z) {
    this.length = function() { return Math.sqrt(x * x + ...); }
}

विभिन्न कारणों से बाद में तेज़ होता है, लेकिन मैंने प्रोटोटाइप संस्करण को देखा है (और मैं अक्सर लिखता हूं) और अन्य लोगों के लिए उत्सुक था।


आपके पास भी पसंद है:

function Vector(x, y, z) {
  function length() {
    return Math.sqrt(x * x + ...);
  }
}

जो शायद दो उदाहरण के रूप में धीमा है, लेकिन यह जावा / सी # जैसा दिखता है और यह थोड़ा अधिक स्पष्ट है।


सौभाग्य से मैं प्रोटोटाइप । जेएस का इस्तेमाल करता हूं, जो कुछ अच्छे रैपर प्रदान करता है। तो आप यह कर सकते हैं:

var Person = Class.create({
    initialize: function(name) {
        this.name = name;
    },
    say: function(message) {
        return this.name + ': ' + message;
    }
});

Prototype.js दस्तावेज़ीकरण: वर्गों और विरासत को परिभाषित करना


ठीक है, मेरे पास इस पर एक विशेषज्ञ राय नहीं है। मैं आम तौर पर क्लोजर आधारित दृष्टिकोण का उपयोग करना समाप्त करता हूं क्योंकि यह मैनेजर को कोड सरल बनाता है लेकिन, मैंने अपने आप को उन विधियों के लिए प्रोटोटाइप का प्रयोग कर लिया है जो कोड की लाइनों का भार है।


प्रोटोटाइप के कार्यों को असाइन करना बेहतर है (सार्वजनिक विधियों के लिए) क्योंकि क्लास के सभी उदाहरण विधि की एक ही कॉपी साझा करेंगे। यदि आप दूसरे उदाहरण के रूप में कन्स्ट्रक्टर के अंदर फ़ंक्शन निर्दिष्ट करते हैं, तो हर बार जब आप एक नया उदाहरण बनाते हैं, तो कन्स्ट्रक्टर लंबाई की एक नई प्रतिलिपि बनाता है और उसे केवल एक उदाहरण के लिए असाइन करता है

हालांकि यह बाद की तकनीक उपयोगी है, यदि आप चाहते हैं कि प्रत्येक प्रति उसकी अपनी प्रतिलिपि हो, तो निजी / विशेषाधिकार विधियों का मुख्य उपयोग जो कि कन्स्ट्रक्टर के अंदर घोषित निजी वैरिएबल तक पहुंच और क्लोजर मैकेनाइजेशन के जरिए उत्तराधिकारी हो।

डगलस क्रॉकफोर्ड का एक अच्छा सारांश है


मैं इस के लिए जॉन रेसीज पुस्तकालय का उपयोग करने का एक बड़ा प्रशंसक हूं हल्के, सीधे-आगे, और आप पहले से ही जानते हैं कि यदि आप 'सामान्य' ऑब्जेक्ट-उन्मुख शैली से परिचित हैं, तो इसका उपयोग कैसे करें।





javascript