Aslında, JavaScript'te nesne oluşturmanın birkaç yolu vardır. Sadece bir nesne oluşturmak istediğinizde, " new " operatörünü kullanarak " yapıcı tabanlı " nesneler yaratmanın faydası yoktur . Bu, " nesne değişmezi " sözdizimini kullanarak bir nesne oluşturmakla aynıdır . Ancak , " prototypal miras " ı düşündüğünüzde " new " operatörü ile oluşturulan " yapıcı tabanlı " nesneler inanılmaz bir şekilde kullanılabilir . Değişmez sözdizimi ile oluşturulan nesnelerle miras zincirini koruyamazsınız. Ancak bir yapıcı işlevi oluşturabilir , prototipine özellikler ve yöntemler ekleyebilirsiniz."işleci, bu yapıcı işlevinin prototipiyle birlikte eklenen tüm yöntemlere ve özelliklere erişebilecek bir nesne döndürür.
Oluşturucu işlevini kullanarak bir nesne oluşturma örneği aşağıdadır (alttaki kod açıklamasına bakın):
function Person(firstname, lastname) {
this.firstname = firstname;
this.lastname = lastname;
}
Person.prototype.fullname = function() {
console.log(this.firstname + ' ' + this.lastname);
}
var zubaer = new Person('Zubaer', 'Ahammed');
var john = new Person('John', 'Doe');
zubaer.fullname();
john.fullname();
Artık Kişi oluşturma işlevini örnekleyerek istediğiniz kadar nesne oluşturabilirsiniz ve hepsi de ondan fullname () devralır.
Not: " this " anahtar sözcüğü, yapıcı işlevi içindeki boş bir nesneye işaret eder ve " new " operatörünü kullanarak Person'ten yeni bir nesne oluşturduğunuzda, " this " anahtar sözcüğüyle eklenen tüm özellikleri ve yöntemleri içeren bir nesneyi otomatik olarak döndürür . Ve bu nesne , Kişi yapıcı fonksiyonunun prototipiyle (bu yaklaşımın ana avantajıdır) ekli yöntemleri ve özellikleri kesin olarak devralacaktır .
Bu arada, " nesne değişmezi " sözdizimiyle aynı işlevselliği elde etmek istiyorsanız, aşağıdaki gibi tüm nesnelerde tam ad () oluşturmanız gerekir:
var zubaer = {
firstname: 'Zubaer',
lastname: 'Ahammed',
fullname: function() {
console.log(this.firstname + ' ' + this.lastname);
}
};
var john= {
firstname: 'John',
lastname: 'Doe',
fullname: function() {
console.log(this.firstname + ' ' + this.lastname);
}
};
zubaer.fullname();
john.fullname();
Sonunda, neden nesne değişmez yaklaşımı yerine yapıcı işlev yaklaşımını kullanmam gerektiğini sorarsanız :
*** Prototippal kalıtım, son derece yararlı ve güçlü olabilen basit bir kalıtım zincirine izin verir.
*** Yapıcı işlev prototipinde tanımlanan ortak yöntemleri ve özellikleri devralarak bellek tasarrufu sağlar. Aksi takdirde, bunları tüm nesnelerde tekrar tekrar kopyalamanız gerekir.
Umarım bu mantıklı gelir.
a = new Object
,a = new Object()
,a = {}
, edebi, çok basit olmasına önce daha hızlı, daha yeni derleyiciler ifadem yanlış olduğu yol açmış olabileceği olduğunu söylerken bazı testler Ben koştum. Aynısı diziler için de geçerlidir