Bu derste, sınırlamaların ve işlevlerin yönlerini göreceğiz. hasOwnProperty() JavaScript'te yöntem. Ayrıca bölümlerde uygulamalarını ve kullanımını da öğreneceğiz.
giriiş
İçinde JavaScript hasOwnProperty() metodu, nesnenin bahsedilen projeye ait olup olmadığını kontrol edecek bir özellik olarak tanımlanır. Özelliğin tanınan bir nesneye ait olduğu tespit edilirse Boolean ifadesine dayalı bir çıktı (doğru veya yanlış) döndürecektir.
Sözdizimi
object.hasOwnProperty(propname)
Argüman
Kayıt:
Burada sembol veya string adını geçmemiz gerekiyor çünkü burası prop'un sembolün veya stringin nesneye ait olup olmadığının kontrol edildiği yerdir. Bu, aşağıda verilen yöntem kullanılarak yapılır.
int'ye java karakteri
var movie = { name: 'iron man', genre: 'super hit', } var song = { name: 'cardigan', } movie.hasOwnProperty('name'); // returns true movie.hasOwnProperty('type'); // returns false song.hasOwnProperty('name'); // returns true song.hasOwnProperty('status'); // returns false
Burada dikkat edilmesi gereken önemli bir husus, hasOwnProperty() yönteminin genellikle devralınan özellikleri göz ardı etmesidir. Bu, nesnenin miras alınmamış bir özelliğe sahip olduğu tespit edilirse ve adın propname ile belirtilmesi durumunda yöntemin true değerini döndüreceği anlamına gelir. False değerini döndürürse, bu, nesnenin belirtilen ada sahip herhangi bir özelliğe sahip olmadığı veya özelliği proptype nesnesinden miras aldığı anlamına gelir.
// Create an object var o = new Object(); // Define a noninherited local property o.x = 3.14; o.hasOwnProperty('x'); // Returns true: x is a local property of o o.hasOwnProperty('y'); // Returns false: o doesn't have a property y o.hasOwnProperty('toString'); // Returns false: toString property is inherited hasOwnProperty() will return true even if you define the undefined or null value. let a = new Object(); a.propertyOne = null; a.hasOwnProperty('propertyOne') // output: true a.propertyTwo = undefined; a.hasOwnProperty('propertyTwo') //Output: true
hasOwnProperty() yöntemini kullanmanın diğer bir avantajı, bir dizeyi varsayılan argüman olarak iletme konseptini takip ederek bir nesneyi başlatabilmesidir. Değerin nesne için mevcut olduğu tespit edilirse hızlı bir şekilde true yanıtı verecektir. Aksi halde bulunamazsa false değerini döndürür. Aşağıda verilen kod parçacığı kullanılarak gösterilebilir.
function Car(name) { this.name = name; } Car.prototype.color = 'red'; const bmw = new Car('x1'); console.log(bmw.name); // property found on object console.log(bmw.color); // color property found on prototype console.log(bmw.hasOwnProperty('name')); // name is found on the object itself console.log(bmw.hasOwnProperty('color')); // color property is not found on the object itself
Yukarıda verilen kod parçacığında değişken yeni bir nesne oluşturur, Araba . Artık Car'ın, özellikleri ve adı yapıcı altında tanımlanarak başlatıldığı söylenebilir. Başlatıldığında nesnenin rengi belirtilmese de prototipte her zaman mevcut olacaktır. hiyerarşi . Bu nedenle, hasOwnProperty() işlevi her zaman ad için true değerini döndürür, ancak renk için false değerini döndürür.
Performans söz konusu olduğunda, hasOwnProperty() nesnenin içinde döngülerle ilerlerken sorunsuz çalışır. Artık özelliklerin spesifik olarak nesneye ait olup olmadığını söyleyebiliriz. Prototiple hiçbir ilişkileri yok. Bunun gösterimi aşağıda verilen kod pasajı kullanılarak gösterilebilir.
// declaring a Car function function Car(name) { this.name = name; } // setting up new prop with prototype Car.prototype.color = 'red'; // creating a new Car object const BMW = new Car('x1'); // looping through every car prop including prototype as well for (let car in BMW) { car + ':', BMW[car]; } /* output: name: x1 output: color: red */ /**************************************/ /*will loop through only self properties of the object, excludes property generated through prototype method */ for (let car in BMW) { if (BMW.hasOwnProperty(car)) { console.log(car + ':', BMW[car]); } } // output: name:
hasOwnProperty() yöntemini kullanırken, nesnenin oluşturulması hasOwnProperty adlı bir özellik tanımlanırken gerçekleştiği için işe yaramaz hale gelebilir. Bunu desteklemek için aşağıda verilen kod parçasını anlamaya çalışın.
dizin linux'u yeniden adlandır
var harrypotter = { hasOwnProperty: function() { return true; } }; // Outputs: true console.log(harrypotter.hasOwnProperty('ridikulus'));
Yukarıdaki kod parçacığında harrypotter'ın zaten hasOwnProperty'ye sahip olduğu açıktır. Bu nedenle, object.prototype.hasOwnProperty'ye hiçbir zaman çağrı yapılmaz. Bunun, arama yapılmasına izin verebileceği durumlarla karşılaşabileceği ancak sonuçta başarısız olabileceği varsayılmaktadır. Bu nedenle, her zaman arama olasılığının farkında olmanız önerilir. Aşağıdaki kod parçacığı bunun geçici çözümünü gösterir.
// Returns false Object.prototype.hasOwnProperty.call(harrypotter, 'ridikulus');
Yukarıdaki kod parçasında harrypotter'ın kendi tanımını tanımladığı açıktır. hasOwnProperty . Object.prototype.hasOwnProperty'ye hiçbir zaman çağrı yapmaz çünkü değerin false olduğu bazı durumlarla karşılaşırsa false döndürme olasılığı vardır ve işleri hemen halletmek zorlaşır. Bu ifadeyi desteklemek için aşağıda verilen kod parçacığına bakın.
// Returns false Obje ct.prototype.hasOwnProperty.call(harrypotter, 'ridikulus');
hasOwnProperty'ye benzer şekilde 'in' yöntemi adı verilen başka bir yöntem daha vardır. Ayrıca nesnenin anahtarının mevcut olup olmadığını kontrol etmek için de kullanılır. Bununla birlikte, hasOwnProperty ile in yöntemi arasındaki temel farkın, in yönteminin miras alınan özellikler ile nesne için özel olarak oluşturulan miras alınan özellikler arasında ayrım yapma sırasını izlememesi gerçeğinde yattığını unutmamak önemlidir. Bu, aşağıda verilen kod pasajı kullanılarak gösterilebilir.
var fantasyLit = { tolkien: 'The Lord of the Rings', lewis: 'The Chronicles of Narnia' }; // Outputs: true console.log('tolkien' in fantasyLit); // Outputs: false console.log('asimov' in fantasyLit); // Outputs: true console.log('constructor' in fantasyLit);
Yukarıdaki kod parçacığında 'in' yönteminin, tüm nesnelerin miras alındığı Object.prototype'in yapıcı özelliğini takip ettiği açıktır.
Birkaç nokta eklemek gerekirse, her iki yöntemin de dezavantajları vardır. Her iki yöntem de bize önceden bildirilmiş bir özellik hakkında kolayca bilgi verebilir ancak gerçek değeri içeren özellik hakkında bize bilgi veremez.
java alt dizesi
Her iki yöntemin de bu geçici çözümü nasıl taşıdığını gösteren aşağıdaki kod parçacığını göz önünde bulundurun.
// Puts a 'declared' property on the global object // (window in browsers) var declared; // Outputs: true console.log('declared' in window); // Outputs: true console.log(window.hasOwnProperty('declared')); // Outputs: undefined console.log(declared); var obj = { myUndefined: undefined }; // Outputs: true console.log('myUndefined' in obj); // Outputs: true console.log(obj.hasOwnProperty('myUndefined')); // Outputs: undefined console.log(obj.myUndefined);
Çözüm
Bu eğitimde, JavaScript'teki hasOwnProperty() yöntemini tartıştık. Genel olarak bu yöntem, çoğu geliştiricinin yapıcı gibi bazı özel anahtarlarla ilgili sorunları araştırmak ve bunlardan kaçınmak için mükemmel bir seçimdir. Herhangi bir özelliğe sahip herhangi bir nesne bulursak, varsayılan olarak hasOwnProperty() işlevini kullanması önerilir. toString() metodu için nesneyi kontrol ederek çağrı yapmayı amaçlayan fonksiyonun varlığı durumunda in kullanmalıyız.