2013-05-02 10 views
5

मैं एक उदाहरण का उपयोग कर एक स्थिर संपत्ति का उपयोग करना चाहता हूं। इसजावास्क्रिप्ट: स्थैतिक गुणों का उपयोग कैसे करें

function User(){ 
    console.log('Constructor: property1=' + this.constructor.property1) ; 
} 
User.prototype = { 
    test: function() { 
     console.log('test: property1=' + this.constructor.property1) ; 
    } 
}  
User.property1 = 10 ; // STATIC PROPERTY 

var inst = new User() ; 
inst.test() ; 

यहाँ की तरह कुछ एक jsfiddle

मेरी स्थिति मैं नहीं जानता कि किस वर्ग उदाहरण के अंतर्गत आता है में एक ही कोड है, इसलिए मैं उदाहरण का उपयोग करते हुए स्थिर संपत्ति का उपयोग करने की कोशिश की 'निर्माता निर्माता 'संपत्ति', सफलता के बिना :( संपत्ति यह संभव है?

+0

जावास्क्रिप्ट –

+0

@Johan में शब्द वर्ग का उपयोग न करें: यह लिंक यहां किसी चीज़ से संबंधित कैसे है? – Bergi

उत्तर

4

तो मैं उदाहरण का उपयोग करते हुए स्थिर संपत्ति का उपयोग करने की कोशिश की '

यह समस्या है, आपके उदाहरणों में constructor संपत्ति नहीं है - आपने पूरे .prototype ऑब्जेक्ट और इसकी डिफ़ॉल्ट गुणों को अधिलेखित कर दिया है। इसके बजाय, का उपयोग

User.prototype.test = function() { 
    console.log('test: property1=' + this.constructor.property1) ; 
}; 

और तुम भी बस this.constructor के माध्यम से चक्कर के बजाय User.property1 का उपयोग हो सकता है। साथ ही आप यह सुनिश्चित नहीं कर सकते कि जिन उदाहरणों पर आप इस विधि को कॉल करना चाहते हैं, उनके constructor संपत्ति User पर इंगित करने वाली संपत्ति होगी - इसलिए इसे सीधे और स्पष्ट रूप से बेहतर पहुंचें। हालांकि मैं अभी तक पता लगा नहीं किया है क्यों, http://jsfiddle.net/etm2d/

User.prototype = { 
test: function() { 
    console.log('test: property1=' + this.constructor.property1) ; 
    } 
} 

समस्याग्रस्त हो रहा है:

+0

मैं कन्स्ट्रक्टर के बाहर से या स्थैतिक विधि से भी स्थिर संपत्ति का उपयोग कैसे कर सकता हूं? –

+2

@AlanKis: यहां सीधे निर्माता पर, उदाहरण के लिए 'User.property1'। – Bergi

+0

बिल्कुल, बेवकूफ मुझे। –

0
function getObjectClass(obj) { 
    if (obj && obj.constructor && obj.constructor.toString) { 
     var arr = obj.constructor.toString().match(
      /function\s*(\w+)/); 

     if (arr && arr.length == 2) { 
      return arr[1]; 
     } 
    } 

    return undefined; 
} 

function User(){ 
    console.log('Constructor: property1=' + this.constructor.property1) ; 
} 

User.property1 = 10 ; 

var inst = new User() ; 

alert(getObjectClass(inst)); 

http://jsfiddle.net/FK9VJ/2/

0

शायद आप पर एक नज़र हो सकता है।

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