2015-03-08 1 views
32

ES6 में, यदि मैं कक्षा बना देता हूं और उस वर्ग का ऑब्जेक्ट बनाता हूं, तो मैं यह कैसे जांचूं कि ऑब्जेक्ट उस वर्ग है?ES6 में, आप किसी ऑब्जेक्ट की कक्षा को कैसे देखते हैं?

मैं केवल typeof का उपयोग नहीं कर सकता क्योंकि ऑब्जेक्ट्स अभी भी "object" हैं। क्या मैं सिर्फ रचनाकारों की तुलना करता हूं?

उदाहरण:

class Person { 
    constructor() {} 
} 

var person = new Person(); 

if (/* what do I put here to check if person is a Person? */) { 
    // do stuff 
} 

उत्तर

47

आप person instanceof Person नहीं कर सकते?

तुलना कंस्ट्रक्टर्स अकेले उपवर्गों

+0

यूप, पूरी तरह से भूल गए! यह काम करता है जैसे कार्यों के साथ (क्योंकि कक्षाएं सिर्फ काम करती हैं!)। धन्यवाद! – Ivan

+1

यह सही उत्तर नहीं है। यदि आपके पास ए, बी, सी कक्षाएं और बीएंड सी ए बढ़ाती है, तो (नया बी()) उदाहरण सी सी सच हो जाता है। – someUser

+1

@someUser: 'नया बी() उदाहरण ए' जावास्क्रिप्ट में विरासत की सबसे उचित परिभाषा है। यदि आप पाते हैं कि आप इसे 'बी' और' सी' के लिए प्राप्त करते हैं, तो आपकी समस्या यह है कि आपने वास्तव में 'सी' से 'बी' प्राप्त किया है जब आप इरादा नहीं चाहते थे। आप अपनी विरासत को कैसे कार्यान्वित कर रहे हैं? – Eric

6

बस सावधानी के एक शब्द के लिए काम नहीं करेगा, instanceof के उपयोग में निर्मित जे एस वर्गों (जैसे String, Number, आदि) का शाब्दिक के लिए विफलता का खतरा लगता है।

typeof("foo") === "string";

अधिक जानकारी के लिए this thread को देखें: इन मामलों में यह इस प्रकार है typeof उपयोग करने के लिए सुरक्षित हो सकता है।

+0

आप डबल सत्यापन – daronwolff

-4

ECMAScript -6 कक्षाएं विरासत के मामले में: सच वापस आ जाएगी, कहना क्लास ए बी और सी के लिए आधार है, तो न instanceof और न ही typeof सही ढंग से काम करेंगे की सुविधा देता है

(new B()) instanceof C // is true 

के रूप में। इस मामले के लिए, मैं कर रहा हूँ:

(new B()).constructor == B 

संपादित: instanceof उल्लेख किए गए मामले के लिए काम करता है, मेरी उदाहरण कोड समस्या हुई।

+1

जोड़ सकते हैं यह बिल्कुल सही नहीं है। यदि आपके पास एक ईएस 6 इंजन लौटा रहा है तो उस लेखक को एक बग सबमिट करें। मैं तो बस Chrome में इस की कोशिश की: वर्ग एक {} _class एक {} _ वर्ग बी फैली एक {} _class बी ए {} _ क्लास सी फैली फैली एक {} _class सी फैली हुई है एक {} _ (नया बी()) उदाहरण 0 सी_false_ (नया बी()) उदाहरण _true_ – Arkain

+0

मेरा बुरा, नमूना गलत था। – someUser

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