जावास्क्रिप्ट में सहायक कार्यों के लिए अनुशंसित दृष्टिकोण क्या है?


10

सहायक कार्यों के लिए अनुशंसित दृष्टिकोण क्या है? मैं अपनी नई "क्लास" बनाने के लिए एक तकनीक चुनना चाहता हूं, और इसके साथ चलना चाहता हूं।

यहाँ डिज़ाइन विकल्प दिए गए हैं जिन्हें मैंने इंगित किया है:

विकल्प 1: बाहरी दायरे में हेल्पर फ़ंक्शन, उदाहरण के संदर्भ में आह्वान करें

function createPane (pane) {
    // logic to create pane
    var proto = Object.create(this.paneList);
    $.extend(paneProto, pane);
    return paneProto;
}

Panes.prototype.initialize = function (panes) {
    var _this = this;
    _.each(panes, function () {
        _this.panes.push(createPane.call(_this, this));
    });
}
  • पेशेवरों: सरल वाक्यविन्यास। createPaneउदाहरण पर प्रकाशित नहीं किया जाता है।
  • विपक्ष: createPane अन्य scopes में सुलभ है।

विकल्प 2: बंद करने में सहायक कार्य, उदाहरण के संदर्भ में आह्वान करें

Panes.prototype.initialize = (function () {

    function createPane (pane) {
        // same logic as last createPane
    }

    return function (panes) {
        // same logic as before - calls createPane
    }

})();
  • पेशेवरों: createPane उदाहरण पर प्रकाशित नहीं किया गया है।
  • विपक्ष: कम पठनीयता और परीक्षणशीलता; इस हेल्पर का परीक्षण आरंभ के दायरे में होना चाहिए।

विकल्प 3: एक निजी पद्धति को इंगित करने के लिए नाम के लिए Prepend _

Panes.prototype._createPane = function (pane) {
    // same logic as last createPane
}

Panes.prototype.initialize = function (panes) {
    // same logic as last, except calls this._createPane
}
  • पेशेवरों:_createPane उदाहरण का संदर्भ है। बाहर से परीक्षणशीलता।
  • विपक्ष: उदाहरण के लिए एक्सपोजर सहायक समारोह।

विकल्प 4: हेल्पर तर्क के रूप में कार्य करता है

Panes.prototype.initialize = (function (createPane) {

    return function (panes) {
        // same logic as before - calls createPane
    }

})(function createPane () {
   // same logic as last createPane
});
  • पेशेवरों: createPane उदाहरण पर प्रकाशित नहीं किया गया है। हेल्पर कार्यों में एक-दूसरे तक पहुंच की कमी होती है।
  • विपक्ष: कम पठनीयता और परीक्षणशीलता; इस हेल्पर का परीक्षण आरंभ के दायरे में होना चाहिए।

जवाबों:


4

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

दूसरा, आपका तीसरा विकल्प मुझे अधिक तर्कसंगत लगता है, लेकिन यह आपकी आवश्यकताओं के साथ-साथ अत्यधिक निर्भर करता है। साथ ही आपको सहायक कार्य को उजागर करने के बारे में अधिक चिंतित नहीं होना चाहिए। समाधान के नियम पूरी तरह से मेरे लिए समझौता को सही ठहराते हैं।

तीसरा, एक डेवलपर के रूप में आपका समय मूल्यवान है; तुच्छ कार्यों को लागू करने के लिए कठिन समय न लें, समय लेने और मानव-त्रुटियों के लिए अधिक स्पष्ट। सोर्स कोड की सादगी एक बड़ी विशेषता है।


1
महदी ने धन्यवाद दिया। मैं एक लंबे समय तक जावास्क्रिप्ट उपयोगकर्ता हूं और हां, यही कारण है कि मैंने उद्धरणों में "वर्ग" लिखा है। हालांकि, शब्दावली भ्रामक है, और कई पेशेवर संगठन कक्षाओं के रूप में जावास्क्रिप्ट के निर्माण कार्यों का उल्लेख करते हैं। developer.mozilla.org/en-US/docs/Web/JavaScript/…
टेलरमैक

और सादगी पर सुझाव के लिए धन्यवाद। मेरा प्रश्न किसी भी चीज की तुलना में गुंजाइश के बारे में अधिक है, अभिगम्यता। सख्त बनाम ढीला।
टेलरमैक

@TaylorMac आपका बहुत स्वागत है, आशा है कि यह मदद करेगा।
महदी

@ मेहदी, कर्नेल्टी जावास्क्रिप्ट की कक्षाएं हैं।
मेनाई अला एडडिन

1

स्टेटिक्स IMO के फंक्शन पर है, आपके मामले में आपके पास एक निजी स्टेटिक है, इसलिए ...

Panes._createPane=function(pane){}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.