objekt - Kako i zašto koristiti hasOwnProperty u JavaScriptu?
Razmotrite:
if (someVar.hasOwnProperty('someProperty') ) {
// Do something();
} else {
// Do somethingElse();
}
Koja je ispravna upotreba/objašnjenje hasOwnProperty('someProperty')?
Zašto jednostavno ne možemo koristiti someVar.someProperty da provjerimo sadrži li objekt someVar svojstvo s imenom someProperty?
Što je u ovom slučaju nekretnina?
Koje svojstvo provjerava ovaj JavaScript?
Odgovor #1
hasOwnProperty vraća logičku vrijednost koja označava ima li objekt na kojem ga pozivate svojstvo s nazivom argumenta. Na primjer:
var x = {
y: 10
};
console.log(x.hasOwnProperty("y")); //true
console.log(x.hasOwnProperty("z")); //false
Međutim, ne gleda lanac prototipova objekta.
Korisno je koristiti ga kada nabrajate svojstva objekta pomoću konstrukta for...in.
Ako želite vidjeti sve detalje, ES5 specifikacija je, kao i uvijek, dobro mjesto za pogledati.
Odgovor #2
Evo kratak i precizan odgovor:
U JavaScriptu, svaki objekt ima hrpu ugrađenih parova ključ-vrijednost koji sadrže meta informacije o objektu. Kada prolaziš kroz sve parove ključ-vrijednost koristeći for...in konstrukciju/petlju za objekt, prolaziš i kroz ove parove ključ-vrijednost s meta informacijama (što definitivno ne želiš).
Korištenjem hasOwnProperty(property) isključuje se ovo nepotrebno petljanje kroz meta informacije i izravno provjerava je li parametar property svojstvo koje je korisnik dao u objektu ili nije. Pod isključuje se mislim na to da hasOwnProperty(property) ne provjerava postoji li property u prototipskom lancu objekta, tj. meta informacijama.
Vraća boolean true/false na temelju toga.
Evo primjera:
var fruitObject = {"name": "Apple", "shape": "round", "taste": "sweet"};
console.log(fruitObject.hasOwnProperty("name")); //true
console.log(Object.prototype.hasOwnProperty("toString")) // true because in above snapshot you can see, that there is a function toString in meta-informationNadam se da je jasno!
Odgovor #3
Sažetak :
hasOwnProperty() je funkcija koja se može pozvati na bilo kojem objektu i prima string kao ulaz. Vraća boolean vrijednost koja je true ako se svojstvo nalazi na objektu, inače vraća false. hasOwnProperty() se nalazi na Object.prototype i stoga je dostupna za bilo koji objekt.
Primjer :
function Person(name) {
this.name = name;
}
Person.prototype.age = 25;
const willem = new Person('willem');
console.log(willem.name); // Property found on object
console.log(willem.age); // Property found on prototype
console.log(willem.hasOwnProperty('name')); // 'name' is on the object itself
console.log(willem.hasOwnProperty('age')); // 'age' is not on the object itselfU ovom primjeru stvara se novi objekt Person. Svaka osoba ima svoje ime koje se inicijalizira u konstruktoru. Međutim, dob se ne nalazi na objektu nego na prototipu objekta. Stoga hasOwnProperty() vraća true za ime i false za dob.
Praktične primjene:
hasOwnProperty() može biti vrlo korisno kada se petlja kroz objekt koristeći for in petlju. Njime možete provjeriti jesu li svojstva iz samog objekta, a ne iz prototipa. Na primjer:
function Person(name, city) {
this.name = name;
this.city = city;
}
Person.prototype.age = 25;
const willem = new Person('Willem', 'Groningen');
for (let trait in willem) {
console.log(trait, willem[trait]); // This loops through all properties, including the prototype
}
console.log('\n');
for (let trait in willem) {
if (willem.hasOwnProperty(trait)) { // This loops only through 'own' properties of the object
console.log(trait, willem[trait]);
}
}Odgovor #4
Provjerava:
Vraća vrijednost tipa Boolean koja pokazuje ima li objekt svojstvo s navedenim nazivom
Metoda hasOwnProperty vraća true ako objekt ima svojstvo određenog imena, a false ako ga nema. Ova metoda ne provjerava postoji li svojstvo u lancu prototipa objekta; svojstvo mora biti član samog objekta.
Primjer:
var s = new String("Sample");
document.write(s.hasOwnProperty("split")); //false
document.write(String.prototype.hasOwnProperty("split")); //true
