Nesneye Yönelik JavaScript (OOJS) Nesne Örnekleri Oluşturmanın 3 Yolu
Bir programlama dili olduğunda nesneler hakkında her şey, öğrenmemiz gereken ilk şey nesneler nasıl oluşturulur. JavaScript'te nesne oluşturmak oldukça kolaydır: bir çift kıvırcık ayraç Ancak, işi yapacak tek yol da nesne oluşturmak ne de tek yolu hiç kullanmanız gerekecek.
JavaScript’te, nesne örnekleri yerleşik nesnelerden yaratılmıştır ve program çalışırken ortaya çıkmaktadır. Örneğin, tarih
tarihler hakkında bize bilgi veren yerleşik bir nesnedir. Bir sayfada geçerli tarihi göstermek istiyorsak, çalışma zamanı örneği gerek tarih
Mevcut tarihle ilgili bilgileri taşıyan.
JavaScript ayrıca bize izin verir kendi nesnelerimizi tanımlayın çalışma zamanında kendi nesne örneklerini üretebilir. JavaScript'te, her şey bir nesnedir ve her nesnenin bir nihai ata denilen Nesne
. Bir nesne örneğinin oluşturulması denir örnekleme.
1. yeni
Şebeke
Yeni bir nesne örneği oluşturmak için en yaygın ve iyi bilinen yöntemlerden biri kullanmak yeni
Şebeke.
İhtiyacın var inşaatçı yapmak yeni
operatör işi. Yapıcı, bir araya getiren bir nesnenin yöntemidir. bu nesnenin yeni örneği. Temel sözdizimi şöyle görünür:
yeni yapıcı ()
Bir yapıcı olabilir argümanları kabul et Bu, inşa ettiği nesne örneğine özellikler değiştirmek veya eklemek için kullanılabilir. Oluşturucu aynı ada sahip ait olduğu nesne olarak.
İşte bir örnek nasıl oluşturulacağı örneği Date ()
nesne ile yeni
anahtar kelime:
dt = yeni Tarih (2017, 0, 1) console.log (dt) // Pzt 01 Ocak 2017 00:00:00 GMT + 0100
Date ()
yeni bir kurucu oluşturmak için tarih
nesne. Bir nesne için farklı yapıcılar farklı argümanlar al aynı tür nesne örneklerini oluşturmak için çeşitli özellikler.
JavaScript'teki tüm yerleşik nesneler gibi başlatılamaz tarih
. Orada nesneler var bir kurucu ile gelme: Matematik
, JSON
ve yansıtmak
, ama onlar hala sıradan nesneler.
Yapıcıya sahip yerleşik nesneler arasında, sembol
yapıcı tarzda çağrılamaz yeni bir örneği başlatmak sembol
örneği. Sadece olabilir işlev olarak adlandırılır hangi yeni döndürür sembol
değer.
Ayrıca, yapıcıya sahip yerleşik nesneler arasında, hepsinin yapıcılarının çağrılması için yapıcılara ihtiyacı yoktur. yeni
somutlaştırılmak için operatör. fonksiyon
, Dizi
, Hata
, ve RegExp
fonksiyon olarak da adlandırılabilir, kullanmadan yeni
anahtar kelime, bunlar yeni bir nesne örneği başlatır ve döndürür.
2. The yansıtmak
nesne
Arka uç programcılar zaten aşina olabilir Yansıma API'leri. Yansıma, programlama dillerinin bir özelliğidir. bazı temel varlıkları inceleyin ve güncelleyin, nesneler ve sınıflar gibi, işlem esnasında.
JavaScript’te zaten gerçekleştirebilirdiniz bazı yansıma işlemleri Nesne
. Ancak uygun Yansıma API'si sonunda JavaScript’te de ortaya çıktı.
yansıtmak
nesnenin bir dizi yöntemi vardır. nesne örnekleri oluştur ve güncelle. yansıtmak
nesne yapıcı yok, bu yüzden ile başlatılamaz yeni
operatör ve tıpkı Matematik
ve JSON
, o işlev olarak adlandırılamaz ya.
ancak, yansıtmak
bir eşdeğeri yeni
Şebeke: Reflect.construct ()
yöntem.
Reflect.construct (target, argumentsList [, newTarget])
İkisi de hedef
ve isteğe bağlı NEWTARGET
argümanlar kendi yapıcılarına sahip olan nesneler, süre argumentsList
bir argümanlar listesi yapıcısına geçirilmek hedef
.
var dt = Reflect.construct (Tarih, [2017, 0, 1]); console.log (dt); // Pzt Oca 01 2017 00:00:00 GMT + 0100
Yukarıdaki kod aynı etkiye sahip örnek olarak Date ()
kullanmak yeni
Şebeke. Yine de kullanabilirsin. yeni
, Yansıma bir ECMAScript 6 standardı. Aynı zamanda yapmanızı sağlar faydalanmak NEWTARGET
tartışma, başka bir avantajı yeni
Şebeke.
Değeri NEWTARGET
'nin prototipi (kesin olarak, bu prototip NEWTARGET
'ın kurucusu) yeni oluşturulan örneğin prototipi olur.
Bir prototip Nesnenin özelliği, değeri ayrıca bir nesne, orijinal nesnenin özelliklerini taşıyan. Kısacası, bir nesne üyelerini prototipinden alır.
Burada bir örnek görelim:
A sınıfı constructor () this.message = function () console.log ('A'dan gelen mesaj)) B sınıfı constructor () message () console.log (' B'den gelen mesajlar ') data () console.log ('B' verileri ') obj = Reflect.construct (A, [], B) console.log (obj.message ()); // bir konsoldan mesaj .log (obj.data ()); // B konsolundaki veriler.log (objenin adı B) // true
Geçerek B
üçüncü argüman olarak Reflect.construct ()
, prototip değeri obj
nesne aynı olmak prototipi olarak B
yapıcısı (ki bu özelliklere sahiptir) mesaj
ve veri
).
Böylece, obj
erişebilir mesaj
ve veri
, prototipinde bulunabilir. Ama, beri obj
kullanılarak yapılır bir
, ayrıca kendi mesaj
o alınan bir
.
Buna rağmen obj
bir dizi olarak inşa edilmiştir örneği değil Dizi
, prototipi ayarlandığı için Nesne
.
obj = Reflect.construct (Dizi, [1,2,3], Nesne) console.log (obj) // Dizi [1, 2, 3] console.log (nesnenin anlamı Array) // false
Reflect.construct ()
bir nesne oluşturmak istediğinizde yararlı olabilir birden fazla plan kullanmak.
3. Object.create ()
yöntem
Ayrıca bir belirli bir prototip ile yeni sıradan nesne üzerinden Object.create ()
. Bu da, kullanmaya çok benzer görünebilir yeni
operatör, ama değil.
Object.create (O [, propertiesObject])
O
argüman olan bir nesnedir prototip hizmet eder oluşturulacak yeni nesne için. İsteğe bağlı propertiesObject
argüman bir özelliklerin listesi yeni nesneye eklemek isteyebilirsiniz.
A sınıfı constructor () message () console.log ('A' mesajından ') var obj = Object.create (new A (), data: yazılabilir: doğru, yapılandırılabilir: doğru, değer: function () return 'veri' obj ') console.log (obj.message ()) // bir konsol.log'dan mesaj (obj.data ()) // obj'ten veri obj1 = Object.create ( yeni A (), foo: yazılabilir: doğru, yapılandırılabilir: doğru, değer: function () objeden 'foo obj1')) konsol.log (obj1.message ()) // A konsolundan mesaj. log (obj1.foo ()) // objeden 1 foo
İçinde obj
Nesne, eklenen özellik veri
, içindeyken obj1
, onun foo
. Yani, gördüğünüz gibi, yapabiliriz. yeni bir nesneye eklenen özellikler ve yöntemler.
Oluşturmak istediğinizde bu harika aynı türden çoklu nesneler fakat farklı ek özellikler veya yöntemler. Object.create ()
sözdizimi, hepsini ayrı ayrı kodlama zahmetinden kurtarır.