2012-01-25 17 views
7

कभी कभी वहाँ एक जे एस framework या पुस्तकालय है कि सोचता है कि यह एक बहुत बुद्धिमान विचार है Object या Array के प्रोटोटाइप के लिए कुछ शुद्ध नई सुविधाओं को जोड़ने के लिए है। मुझे अभी और कोई उदाहरण नहीं मिल रहा है, लेकिन मुझे याद है कि मुझे इससे पहले समस्याएं थीं। बेशक, ऐसा करने से अच्छे पुराने for(...in...) पाश टूट जाता है, क्योंकि अचानक उन गुणों अब भी enumerated हैं। इसके आस-पास पहुंचने के लिए आपको पहुंचने से पहले .hasOwnProperty() के साथ प्रत्येक समृद्ध संपत्ति की जांच करनी होगी। मजबूत कोड लिखने की कोशिश करते समय बोझिल कौन सा है।क्या आप जावास्क्रिप्ट में कोई ऑब्जेक्ट बना सकते हैं जो ऑब्जेक्ट से प्राप्त नहीं होता है?

तो मैं सोच रहा गया - वहाँ कुछ रास्ता है कि मैं अपने ही वस्तुओं तो कर सकता है, कि वे Object से विरासत में नहीं आता है? प्रारंभ में .prototype के साथ खेलना कोई परिणाम नहीं मिला। शायद इसके लिए कुछ चाल है? या सबकुछ हमेशा Object से प्राप्त होगा और इसके बारे में कुछ भी नहीं है?

जोड़ा गया: मुझे लगता है कि मुझे यह ध्यान रखना चाहिए था कि मैं इसे ब्राउज़र में क्लाइंट-स्क्रिप्ट के लिए चाहता हूं, और संगतता में आईई 6, या कम से कम आईई 7 शामिल होना चाहिए। अन्य ब्राउज़र संस्करण की आवश्यकताएं अधिक उदार हैं, हालांकि ज़्यादा बेहतर है। (हाँ, दुर्भाग्य से, कॉर्पोरेट जगत अभी भी IE-दुनिया में रहती है ...)

+0

* खराब * पुराना '(... में ...)' लूप निश्चित रूप से –

+1

@RobAgar - ऐसा क्यों? असल में, मैं 'लिखने के लिए थक गया हूं' (var i, l = myArray.length; i

+0

आमतौर पर प्रोटोटाइप को बदलने वाले ढांचे, तत्वों के माध्यम से लूप करने का एक तरीका भी प्रदान करते हैं। मुट्टूल में, 'myObj.each()' काम करेगा .. '' "foo", "bar"]। प्रत्येक() ' – pleasedontbelong

उत्तर

4

ECMAScript 5 में आप पास कर सकते हैं nullObject.create रहे हैं:

> obj = Object.create(null); 
    Object 
    No Properties 
+0

वाह! बहुत बढ़िया! यह वास्तव में काम करता है! ब्राउज़र संगतता को छोड़कर निराशाजनक है। :(मुझे लगता है कि मुझे यह कहना चाहिए था कि मुझे आईई 6, या कम से कम आई 7 के लिए इसकी आवश्यकता है। –

+0

मुझे लगता है कि उस मामले में आप भाग्य से बाहर हैं और '.hasOwnProperty' का उपयोग करना आपका एकमात्र मौका है। –

1

आप स्पष्ट रूप से किसी भी वस्तु के गुण है कि गणनीय हैं हटा सकते हैं, लेकिन मोडर ब्राउज़र गैर-संख्यात्मक ऑब्जेक्ट विधियों की अनुमति देते हैं।

हालांकि पुराने ब्राउज़र में काम करना चाहिए।

function Myobject(props){ 
} 
var O=Object,OP=Object.prototype; 
for(var p in O)delete Myobject[p]; 
for(var p in OP)delete Myobject.prototype[p]; 
+0

दिलचस्प विचार, कोशिश करेगा। भी - अगर वे गैर-गणना योग्य हैं, तो यह पहले से ही ठीक है। मुझे केवल पहली जगहों पर गिनती की परवाह है। –

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

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