2015-03-08 13 views
32

ES6'da, bir sınıf oluşturup bu sınıfın bir nesnesini oluşturuyorsam, nesnenin bu sınıf olduğunu nasıl kontrol ederim?ES6'da, bir nesnenin sınıfını nasıl kontrol edersiniz?

Nesneler hala "object" olduğu için typeof kullanamıyorum. Ben sadece kurucuları karşılaştırdım mı?

Örnek: person instanceof Person

class Person { 
    constructor() {} 
} 

var person = new Person(); 

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

cevap

47

yapamaz mı?

alt sınıfları

+0

Yup, bunu tamamen unutmuş! Aynı işlevlerde olduğu gibi çalışır (çünkü sınıflar sadece işlevlerdir!). Teşekkürler! – Ivan

+1

bu doğru cevap değil. A, B, C sınıfları ve B & C'niz A'yı uzatırsa, o zaman (yeni B()) instanceof C değeri true olarak döner. – someUser

+1

@someUser: 'new B() instanceof A', javascript'teki en kalıtım kalıtımsal tanımdır. Eğer bunu 'B' ve 'C' için bulduğunuzu fark ederseniz, meseleniz, niyetiniz olmadığında "B" den miras aldığınızdır. Mirasınızı nasıl uyguluyorsunuz? – Eric

6

dikkatli Sadece bir kelime için çalışmaz yalnız kurucular karşılaştırılması, instanceof kullanımı yerleşik JS sınıflarına (mesela String, Number vs.) sayılların bozulmaya meyilli görünüyor.

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

fazla bilgi için this thread bakın şu şekildedir: Bu durumlarda typeof kullanmak daha güvenli olabilir.

+0

Çift doğrulama – daronwolff

-4

ECMAScript-6 sınıflar miras durumunda: true dönecektir

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

olarak, o zaman ne instanceof ne de typeof düzgün çalışacaktır sınıfı A, B ve C için üs diyelim. Bu durumda, ben yapıyorum:

(new B()).constructor == B 

Edit: yanı belirtilen örneğin çalışır instanceof, benim kod örneği sorunu vardı.

+1

ekleyebilirsiniz. Bu hiç doğru değil. Geri dönen bir ES6 motoru varsa, yazara bir hata gönderin. Sadece krom bu çalıştı: class A {} _class bir {} _ sınıf B uzanan bir {} _class B A {} _ C sınıfı olarak uzanır bir {} _class Cı uzanan bir {} _ (yeni B()) instanceof C _false_ (yeni B()) instanceof A _true_ – Arkain

+0

hatalı, örnek yanlıştı. – someUser

İlgili konular