2012-11-09 11 views
6

बेस ऑब्जेक्ट पर Object.defineProperty() का लाभ उठाने का प्रयास करते समय मैं एक हैंगअप में भाग रहा हूं। मैं Object.create() का उपयोग करके उस ऑब्जेक्ट से गुणों का उत्तराधिकारी बनाना चाहता हूं, और फिर व्युत्पन्न ऑब्जेक्ट में अधिक गुण परिभाषित करना चाहता हूं (जिसे वहां से विरासत में प्राप्त किया जा सकता है)। मुझे ध्यान रखना चाहिए कि मैं इसे node.js. पर लक्षित कर रहा हूं।console.create से console.log() विरासत गुणों को क्यों नहीं दिखाता है?

var Base = {}; 

Object.defineProperty(Base, 'prop1', { 
    enumerable:true, 
    get:function(){ return 'prop1 value';} 
}); 

Object.defineProperty(Base, 'prop2', { 
    enumerable:true, 
    value : 'prop 2 value' 
}); 

Object.defineProperty(Base, 'create', { 
    value:function(){ 
     return Object.create(Base); 
    } 
}); 

console.log(Base); 

var derived = Base.create(); 

Object.defineProperty(derived, 'prop3', { 
    enumerable:true, 
    value:'prop 3 value' 
}); 

console.log(derived); 

निम्नलिखित कौन सा आउटपुट:

{ prop1: [Getter], prop2: 'prop 2 value' } 
{ prop3: 'prop 3 value' } 

मैंने सोचा था कि console.log() विरासत में मिला गुण, साथ ही संपत्ति prop3 कि मैं परिभाषित करके बताना होगा

यहाँ एक उदाहरण है व्युत्पन्न वस्तु पर। ऐसा लगता है कि यह इस तरह से परिभाषित गुणों के लिए प्रोटोटाइप पदानुक्रम को नहीं देखता है। क्या वो सही है?

मैंने अपनी ऑब्जेक्ट के लिए toString() विधि को ओवरराइड करने पर देखा, लेकिन ऐसा लगता है कि console.log() इसे कॉल नहीं करता है।

  1. मैं उन सभी के माध्यम से गणना किए बिना लॉग इन सभी गुण कैसे प्राप्त कर सकता हूं?
  2. क्या यह विरासत को लागू करने का एक वैध तरीका है?

संपादित करें:

  1. वहाँ Node.js 'पुस्तकालयों में एक और समारोह है कि काम करते हैं और लॉग विरासत में मिला गुण होता है?
+1

आलसी के लिए दिखाने के लिए लग रहे हैं aDrjA/1/ –

+1

स्टार्टर्स के लिए, 'कंसोल' का कार्यान्वयन ब्राउज़र-विशिष्ट है। आप वास्तव में उसी तरह व्यवहार करने के लिए इस पर भरोसा नहीं कर सकते हैं, ब्राउज़र पर ब्राउज़र, क्योंकि प्रत्येक विक्रेता गैर-मानक के साथ पूरी तरह से कुछ अलग कर रहा है। जब आप 'console.log (ऑब्जेक्ट);' क्रोम देव-टूल्स में, आपको एक विस्तारणीय नोड-पेड़ मिलता है, जिसमें सभी स्वामित्व वाली विधियां और गुण होते हैं, और इसमें 'प्रोटो' श्रृंखला भी होती है, जिसमें पूर्ण विरासत ढेर होता है ... प्रत्येक ब्राउजर में इसकी उम्मीद नहीं होने वाली है - कुछ ब्राउज़रों (डब्ल्यूपी 7 आईई 9) में प्रोग्राम क्रैश हो जाएंगे यदि उन्हें 'window.console' भी दिखाई देता है, क्योंकि उनके पास कार्यान्वयन भी नहीं है। – Norguard

+1

*** "मुझे ध्यान रखना चाहिए कि मैं इसे node.js पर लक्षित कर रहा हूं।" *** –

उत्तर

1

Firebug विरासत में मिला गुण लोग इन करता है:

enter image description here

जबकि क्रोम आप एक पेड़-व्यू जो विरासत में मिला गुण शामिल हैं देता है:

enter image description here

+0

@ ड्वर्नरर क्रोम एक पेड़-दृश्य प्रदान करता है। 'console.log' कार्यान्वयन-विशिष्ट है। ऐसा लगता है कि Node.js ने केवल अपनी संपत्तियों को लॉग करने का निर्णय लिया है।बेशक, इसका मतलब यह नहीं है कि वस्तु अन्य दो गुणों का वारिस नहीं करती है। –

4

आप उपयोग कर सकते हैं console.dir() जहां उपलब्ध

console.dir(derived) 

और यह __proto__ वस्तु

संपादित करें पर अपनी वस्तु की विरासत में मिला गुण दिखाएंगे: http://jsfiddle.net/: does not को नोड पर हालांकि

+0

console.dir() धन्यवाद के बारे में जानना भी अच्छा है। मुझे यकीन नहीं है कि मैं '__proto__' पर भरोसा करना चाहता हूं। – dwerner

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