logo

„JavaScript“ turi savo nuosavybę

Šioje pamokoje pamatysime apribojimų ir funkcijų aspektus, susijusius su hasOwnProperty() metodas JavaScript. Skyriuose taip pat sužinosime apie jo įgyvendinimą ir naudojimą.

Įvadas

Į JavaScript , metodas hasOwnProperty() apibrėžiamas kaip nuosavybė, užtikrinanti, ar objektas priklauso minėtam projektui, ar ne. Jei nustatoma, kad ypatybė priklauso atpažintam objektui, ji turi grąžinti Būlio teiginiu pagrįstą išvestį, t. y. teisinga arba klaidinga.

Sintaksė

 object.hasOwnProperty(propname) 

Argumentas

Įrašas:

Čia turime perduoti simbolį arba eilutės pavadinimą, nes tai yra atramos vieta, kurioje patikrinama, ar simbolis ar eilutė priklauso objektui. Tai atliekama naudojant toliau pateiktą metodą.

 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 

Vienas svarbus aspektas, į kurį reikia atkreipti dėmesį, yra tai, kad metodas hasOwnProperty() paprastai nepaiso paveldėtų savybių. Tai reiškia, kad metodas turi grąžinti savo tikrąją vertę, jei nustatoma, kad objektas turi nepaveldėtą savybę, o pavadinimas nurodomas pagal propname. Jei grąžinama false, tai reiškia, kad objektas neturi jokios nuosavybės nurodytu pavadinimu arba paveldėjo savybę iš buto tipo objekto.

 // 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 

Kitas papildomas metodo hasOwnProperty() pranašumas yra tas, kad jis gali inicijuoti objektą, laikantis idėjos perduoti eilutę kaip numatytąjį argumentą. Ji turi greitai reaguoti su tiesa, jei nustatoma, kad vertė yra prieinama objektui. Kitu atveju, jei nerastas, jis bus klaidingas. Tai galima parodyti naudojant toliau pateiktą kodo fragmentą.

 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 

Aukščiau pateiktame kodo fragmente kintamasis sukuria naują objektą, Automobilis . Dabar galima teigti, kad Automobilis yra inicijuotas, jo savybės ir pavadinimas yra apibrėžti pagal konstruktorių. Nors inicijuojant spalva gali būti nepaminėta objekte, ji visada bus prieinama prototipiniame objekte hierarchija . Todėl „hasOwnProperty()“ visada pateiks pavadinimą „true“, o spalvos atveju – „false“.

Kalbant apie našumą, hasOwnProperty() veikia sklandžiai, o per objektą pereina kilpomis. Iki šiol galime pasakyti, kad jei savybės konkrečiai priklauso objektui. Jie neturi jokio ryšio su prototipu. Tai gali būti parodyta naudojant toliau pateiktą kodo fragmentą.

 // 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: 

Naudojant hasOwnProperty() metodą, jis gali pasidaryti nenaudingas, nes objektas atvaizduojamas apibrėžiant ypatybę pavadinimu hasOwnProperty. Norėdami tai patvirtinti, pabandykite suprasti toliau pateiktą kodo fragmentą.

 var harrypotter = { hasOwnProperty: function() { return true; } }; // Outputs: true console.log(harrypotter.hasOwnProperty('ridikulus')); 

Aukščiau pateiktame kodo fragmente akivaizdu, kad harrypotter jau turi hasOwnProperty. Taigi jis niekada neskambins į objektą.prototype.hasOwnProperty. Manoma, kad tai gali susidurti su atvejais, kai tai gali leisti skambinti, bet galiausiai gali nepavykti. Taigi, visada rekomenduojama žinoti apie skambučių galimybę. Toliau pateiktame kodo fragmente parodytas sprendimas.

 // Returns false Object.prototype.hasOwnProperty.call(harrypotter, 'ridikulus'); 

Aukščiau pateiktame kodo fragmente aišku, kad harrypotteris apibrėžia savo turi OwnProperty . Ji niekada neskambins į Object.prototype.hasOwnProperty, nes yra tikimybė, kad jis gali grąžinti false, jei aptiks kai kuriuos atvejus, kai vertė yra klaidinga ir bus sunku priversti viską veikti už kampo. Norėdami patvirtinti šį teiginį, žr. toliau pateiktą kodo fragmentą.

 // Returns false Obje ct.prototype.hasOwnProperty.call(harrypotter, 'ridikulus'); 

Panašiai kaip hasOwnProperty, yra ir kitas metodas, vadinamas „in“ metodu. Jis taip pat naudojamas patikrinti, ar yra objekto raktas, ar ne. Tačiau svarbu pažymėti, kad pagrindinis skirtumas tarp „hasOwnProperty“ ir „in“ metodo slypi tame, kad metodas „in“ nesilaikys paveldimų savybių atskyrimo tvarkos, o paveldimos savybės yra specialiai sukurtos objektui. Tai galima parodyti naudojant toliau pateiktą kodo fragmentą.

 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); 

Aukščiau pateiktame kodo fragmente akivaizdu, kad metodas „in“ vadovaujasi Object.prototype konstruktoriaus savybe, iš kurios paveldimi visi objektai.

Norėdami pridėti keletą punktų, abu metodai turi trūkumų. Abu metodai gali lengvai suteikti mums informacijos apie jau deklaruotą turtą, tačiau jie negali pasakyti apie turtą, kurio tikroji vertė.

Apsvarstykite šį kodo fragmentą, kuris parodo, kaip abu metodai atlieka šį sprendimą.

 // 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); 

Išvada

Šioje pamokoje aptarėme „JavaScript“ metodą hasOwnProperty(). Apskritai, šis metodas yra puikus pasirinkimas daugeliui kūrėjų, norint pasiteirauti ir išvengti problemų, susijusių su kai kuriais specialiais raktais, pavyzdžiui, konstruktoriumi. Jei rasime objektą, turintį kokią nors ypatybę, rekomenduojama pagal numatytuosius nustatymus naudoti hasOwnProperty(). Jei yra funkcija, skirta iškviesti tikrinant objektą toString() metodui, turime naudoti in.