2013-01-23 20 views

उत्तर

75

दे यह एक कोशिश B.prototype instanceof A

+2

** ES6 ** 'कक्षा' के बारे में क्या? 'कक्षा ए बी {} 'बढ़ाता है, फिर मैं कक्षा' ए' – Omid

+0

@ ओमिड ** ईएस 6 कक्षा वाक्यविन्यास ** के उत्तराधिकारों की जांच कैसे कर सकता हूं ** ज्यादातर विशेष _syntax_।दृश्यों के पीछे "कक्षाओं" का वास्तविक संचालन नहीं बदला है और इस प्रकार आप अभी भी 'एप्रोटोटाइप' के साथ काम कर सकते हैं ... https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/कक्षाएं – cepharum

17

आप

B.prototype.constructor === A 

के साथ सीधे विरासत का परीक्षण अप्रत्यक्ष विरासत परीक्षण करने के लिए कर सकते हैं, तो आप उपयोग कर सकते हैं

B.prototype instanceof A 

(इस दूसरे समाधान पहले निर्वाण Tikku द्वारा दिया गया था)

+5

नहीं है कि काम केवल जाँच करेगा कि माता-पिता वर्ग, सभी विरासत नहीं जीई श्रृंखला – Simon

+0

बस इसे बहाल किया। धन्यवाद dystroy (इस उत्तर को अद्यतन करने के लिए भी) –

1

गॉटचास: ध्यान दें कि instanceof अपेक्षाकृत काम नहीं करता है यदि आप एकाधिक निष्पादन संदर्भ/विंडो का उपयोग करते हैं। §§ देखें।

function f(_, C) { // instanceof Polyfill 
    while (_ != null) { 
    if (_ == C.prototype) 
     return true; 
    _ = _.__proto__; 
    } 
    return false; 
} 

संशोधित करना यह जाँच करने के लिए वर्ग सीधे हमें देता है:


इसके अलावा, https://johnresig.com/blog/objectgetprototypeof/ प्रति, इस एक विकल्प के कार्यान्वयन कि instanceof के समान है है

function f(ChildClass, ParentClass) { 
    _ = ChildClass.prototype; 
    while (_ != null) { 
    if (_ == C.prototype) 
     return true; 
    _ = _.__proto__; 
    } 
    return false; 
} 


Sidenote

instanceof खुद की जाँच करता है, तो obj.protof.prototype है, इस प्रकार:

function A(){}; 
A.prototype = Array.prototype; 
[]instanceof Array // true 

और:

function A(){} 
_ = new A(); 
// then change prototype: 
A.prototype = []; 
/*false:*/ _ instanceof A 
// then change back: 
A.prototype = _.__proto__ 
_ instanceof A //true 

और:

function A(){}; function B(){}; 
B.prototype=Object.prototype; 
/*true:*/ new A()instanceof B 

यदि यह बराबर नहीं है, आद्य में आद्य की आद्य साथ बदली है चेक, फिर प्रोटो के प्रोटो के प्रोटो, और इसी तरह। इस प्रकार:

function A(){}; _ = new A() 
_.__proto__.__proto__ = Array.prototype 
g instanceof Array //true 

और:

function A(){} 
A.prototype.__proto__ = Array.prototype 
g instanceof Array //true 

और:

f=()=>{}; 
f.prototype=Element.prototype 
document.documentElement instanceof f //true 
document.documentElement.__proto__.__proto__=[]; 
document.documentElement instanceof f //false 
+0

https://stackoverflow.com/a/29543030/632951 और https://stackoverflow.com/q/30993434/632951 भी देखें – Pacerier

4

वापस 2017 के लिए:
जांच करता है, तो के लिए आप

A.isPrototypeOf(B)