2011-06-24 6 views
6

मैं निम्नलिखित समारोहजावास्क्रिप्ट या नहीं

var myInstance = (function() { 
    var privateVar = 'Test'; 

    function privateMethod() { 
    // ... 
    } 

    return { // public interface 
    publicMethod1: function() { 
     // all private members are accesible here 
     alert(privateVar); 
    }, 
    publicMethod2: function() { 
    } 
    }; 
})(); 

अगर मैं समारोह के लिए एक नया जोड़ने क्या अंतर है की है। फायरबग से, ऐसा लगता है कि दो ऑब्जेक्ट समान हैं। और जैसा कि मैं समझता हूं, दोनों को सिंगलटन पैटर्न को लागू करना चाहिए।

var myInstance = new (function() { 
    var privateVar = 'Test'; 

    function privateMethod() { 
    // ... 
    } 

    return { // public interface 
    publicMethod1: function() { 
     // all private members are accesible here 
     alert(privateVar); 
    }, 
    publicMethod2: function() { 
    } 
    }; 
})(); 
+2

[जावास्क्रिप्ट में "नया" कीवर्ड क्या है?] (Http://stackoverflow.com/questions/1646698/what -is-नए-कीवर्ड-इन-जावास्क्रिप्ट) – mplungjan

उत्तर

7

जबकि अंतिम परिणाम समान लगता है, यह कैसे मिला और इसमें क्या निष्पादित किया गया अलग है।

पहला संस्करण thiswindow ऑब्जेक्ट के संदर्भ में अज्ञात फ़ंक्शन निष्पादित करता है। दूसरा संस्करण अज्ञात फ़ंक्शन निष्पादित करता है, लेकिन this एक नई खाली वस्तु के संदर्भ में है।

अंत में, वे दोनों एक और वस्तु (आपका सिंगलटन) लौटते हैं। यह निष्पादन संदर्भ में थोड़ा सा अंतर है।

इसका परीक्षण करने के लिए, परिवर्तनीय की घोषणा से ठीक पहले ।

@ टॉम स्क्वायर: यह जरूरी नहीं है और खराब अभ्यास है कि आप अपने चर घोषित न करें। "use strict"; निर्देश के साथ एक स्क्रिप्ट जेएस इंजन को शिकायत करने का कारण बनती है (यह मानते हुए कि इंजन "use strict" का समर्थन करता है;

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