2013-01-09 23 views
5

में सरणी की लंबाई को वापस करने के लिए फ़ंक्शन.लेथेंथ को ओवरराइड करने के लिए कैसे करें I जावास्क्रिप्ट में किसी ऑब्जेक्ट की लम्बाई प्रॉपर्टी को ओवरराइड करने का तरीका ढूंढ रहा हूं।सख्त मोड

मैं वर्तमान में

यह बुनियादी संरचना है (मूल कोड संदर्भ में अधिक पठनीय होने के लिए प्रयोग किया जाता है) parent.properties.objects सरणी पर एक आवरण है:

(माता-पिता चर नाम स्थान में परिभाषित किया गया और intialized है)

var parent = function() { 
    this.properties = { 
    objects: []; 
    }; 
}; 

आवरण

(function() { 
    "use strict"; 

    objects = function() { 

कोई तर्क पारित हो जाता है, तो यह मान

if (arguments.length === 0) { 
    var _objects = parent.properties.objects; 
    return _objects; 

संशोधित मिलता है या फिल्टर

} else if (arguments.length > 0) { 
     ... 
    } 
    }; 

इस (नहीं [प्रोटोटाइप]) चर एक object.prototype बनाता वस्तुओं और विधि लंबाई (कहते हैं)

objects.prototype.length = function() { 
    var length = parent.properties.objects.length; 
    return length; 
    } 

त्रुटि

012,
objects.prototype.__proto__.length = function() {  
    var length = parent.properties.objects.length; 
    return length; 
    } 

    parent.objects = objects; 
})(); 
+0

क्या आप इस तरह की त्रुटि के बारे में अधिक विशिष्ट हो सकते हैं? – guypursey

+0

मैंने इसे ऑब्जेक्ट्स के साथ हैक किया। लम्बाई() (जावास्क्रिप्ट केस संवेदनशील है)। मैं इसे एक आरामदायक एपीआई लिखने के लिए कर रहा हूं, और हर संपत्ति के लिए एक समारोह नहीं है/ऑपरेशन सेट करें। लेकिन हर संपत्ति के लिए एक समारोह। ऑब्जेक्ट्स कॉल करना अच्छा होगा। लम्बाई(), लेकिन ऑब्जेक्ट्स। लम्बाई() ऑब्जेक्ट्स() लम्बाई()। त्रुटि किसी प्रकार का __proto__ नहीं मिला ब्ला ब्ला ब्लाह। ईसीएमए 6 के लिए इंतजार करना होगा। –

+0

आपकी आखिरी पंक्ति 'parent.object = ऑब्जेक्ट' क्या है? 'parent' एक फ़ंक्शन है, और मुझे 'ऑब्जेक्ट' वैरिएबल कहीं भी घोषित नहीं किया गया है – Bergi

उत्तर

3

मान लिया जाये कि मैं सही ढंग से अपने प्रश्न समझ लिया है, निम्नलिखित कोड आप मदद कर सकता है:

function MyObject() { 
    this.myActualData = []; 
} 

Object.defineProperty(MyObject.prototype, 'length', {get: function() { 
    return this.myActualData.length; 
}}); 

और यहाँ उपयोग में इसके बारे में एक उदाहरण है:

var x = new MyObject(); 
x.myActualData.push("Hello"); 
x.myActualData.push("World"); 
x.length; // is 2 

नोटः यह केवल होगा काम ecmascript 5 और ऊपर ब्राउज़र पर।

+0

मैं इसे अज्ञात ऑब्जेक्ट के नाम (MyObject) पर कैसे काम कर सकता हूं, जैसे कि पृष्ठ लोड के दौरान ऑब्जेक्ट और उसका नाम बनाया जा रहा है ..? –

+0

मुझे यकीन नहीं है कि मैं आपके प्रश्न को पूरी तरह से समझता हूं, लेकिन आप किसी ऑब्जेक्ट पर ऑब्जेक्ट.डेफिनप्रॉपर्टी कॉल कर सकते हैं, केवल एक प्रोटोटाइप नहीं। – kybernetikos

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