2013-07-25 3 views
6

कोड के निम्नलिखित भाग में, मैं B.prototype.log के अंदर A.prototype.log तक कैसे पहुंच सकता हूं?विरासत प्रोटोटाइप विधि को ओवरराइड करना और मूल को एक नए अंदर

function A() {} 

A.prototype.log = function() { 
    console.log("A"); 
}; 

function B() {} 

B.prototype = Object.create(A.prototype); 
B.prototype.constructor = B; 

B.prototype.log = function() { 
    //call A.prototype.log here 
    console.log("B"); 
}; 

var b = new B(); 
b.log(); 

मैं जानता हूँ कि मैं सिर्फ A.prototype.log.call(this) लिख सकता है लेकिन मैंने सोचा कि शायद वहाँ एक और अधिक सुरुचिपूर्ण रास्ता है, मुझे एक रिश्तेदार तरीके से फोन की सुविधा देता है, जैसे "विधि में अगले उच्च उदाहरण के 'लोग इन' कहते हैं प्रोटोटाइप श्रृंखला "। क्या ऐसा कुछ संभव है?

+1

वास्तव में, 'एप्रोटोटाइप.लॉग.call (यह)' वही था जो मैंने खोजा था। धन्यवाद! – ProblemsOfSumit

उत्तर

5

आप इस्तेमाल कर सकते हैं Object.getPrototypeOf

... 
B.prototype.log = function() { 
    Object.getPrototypeOf (B.prototype).log.call(this) 
    console.log("B"); 
}; 
... 
b.log(); //A B 

नोट: Object.getPrototypeOf ECMASript 5, compatibility


देख वहाँ भी है गैर मानक और __proto__ संपत्ति पदावनत (compatibility) जो

संदर्भ के रूप में अपने आंतरिक एक ही वस्तु [[प्रोटोटाइप]]

और आप इस

B.prototype.__proto__.log.call(this)

लेकिन

की तरह अपने A s 'लॉग विधि कॉल करने की अनुमति होगी

पसंदीदा विधि Object.getPrototypeOf का उपयोग करना है।

+0

+1 यह निश्चित रूप से एक तरीका है, हाँ! धन्यवाद! – basilikum

+0

@ बेसिलिकम आपका स्वागत है =) – C5H8NNaO4

+0

@ सी 5 एच 8 एनएनएओ 4 कोड में एक प्रकार है, सही एक 'Object.getPrototypeOf (B.prototype.log) है। यह (') – loretoparisi

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