logo

ЈаваСцрипт имаОвнПроперти

У овом туторијалу видећемо аспекте ограничења и функције које се односе на хасОвнПроперти() метод у ЈаваСцрипт-у. Такође ћемо научити о његовој имплементацији и употреби у одељцима.

јава виртуелна машина

Увод

Ин ЈаваСцрипт , метода хасОвнПроперти() је дефинисана као својство да би се осигурало да ли објекат припада поменутом пројекту или не. Ако се открије да својство припада препознатом објекту, онда ће вратити излаз заснован на Буловим исказима, односно тачно или нетачно.

Синтакса

 object.hasOwnProperty(propname) 

Расправа

Снимање:

Овде треба да проследимо име симбола или стринга јер је то место пропа где се проверава да ли симбол или стринг припада објекту. Ово се ради помоћу методе дате у наставку.

 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 

Један важан аспект који овде треба приметити је да метода хасОвнПроперти() генерално игнорише наслеђена својства. То значи да ће метода вратити свој труе ако се утврди да објекат има ненаслеђено својство и да је име специфицирано помоћу имена проп. Ако врати фалсе, онда то значи да објекат нема никакво својство са наведеним именом или је наследио својство од објекта проптипе-а.

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

Још једна додатна предност коришћења методе хасОвнПроперти() је та што може да иницијализује објекат пратећи концепт прослеђивања стринга као подразумеваног аргумента. Он ће брзо одговорити са тачном ако се утврди да је вредност доступна објекту. У супротном, вратиће нетачно ако није пронађен. Може се демонстрирати коришћењем исечка кода који је дат у наставку.

 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 

У горе наведеном исечку кода, променљива ствара нови објекат, Ауто . Сада се може констатовати да је Ауто покренут са својим својствима и именом дефинисаним под конструктором. Иако се боја можда неће помињати унутар објекта када се покрене, она ће увек бити доступна на прототипу хијерархија . Према томе, хасОвнПроперти() ће увек вратити труе за име, али за боју ће вратити нетачно.

Када је реч о перформансама, хасОвнПроперти() ради глатко док се пробија кроз објекат са петљама. До сада можемо рећи да ако својства посебно припадају објекту. Они немају никакве везе са прототипом. Демонстрација овога може бити приказана коришћењем исечка кода који је дат у наставку.

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

Док користите метод хасОвнПроперти(), он може постати бескорисан јер се приказивање објекта дешава приликом дефинисања својства под називом хасОвнПроперти. Да бисте то подржали, покушајте да разумете исечак кода дат у наставку.

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

У горњем исечку кода, очигледно је да Харипотер већ има хасОвнПроперти. Дакле, никада неће упутити позив објекту.прототипе.хасОвнПроперти. Претпоставља се да ово може наићи на случајеве у којима може дозволити упућивање позива, али на крају не успе. Дакле, увек се препоручује да будете свесни могућности позива. Исечак кода испод показује његово решење.

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

У горњем исечку кода јасно је да Харипотер дефинише своје хасОвнПроперти . Никада неће позивати Објецт.прототипе.хасОвнПроперти јер постоји могућност да врати фалсе ако наиђе на неке случајеве у којима је вредност лажна и постаје тешко учинити да ствари раде иза угла. Да бисте подржали ову изјаву, погледајте исечак кода дат у наставку.

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

Слично хасОвнПроперти, постоји још један метод који се зове 'ин' метод. Такође се користи за проверу да ли је кључ присутан за објекат или не. Међутим, важно је напоменути да је кључна разлика између хасОвнПроперти и ин методе у чињеници да ин метода неће пратити редослед разликовања између својстава која се наслеђују и оних која су наслеђена својства посебно креирана за објекат. Ово се може приказати помоћу исечка кода који је дат у наставку.

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

У горњем исечку кода, очигледно је да метода 'ин' прати својство конструктора Објецт.прототипе одакле се сви објекти наслеђују.

Да додам неколико тачака, обе методе имају недостатак. Обе методе нам лако могу дати информације о својству које је већ декларисано, али нам не могу рећи о својству које садржи стварну вредност.

Размотрите следећи исечак кода који показује како обе методе носе ово решење.

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

Закључак

У овом водичу смо разговарали о методи хасОвнПроперти() у ЈаваСцрипт-у. Генерално, овај метод је одличан избор за већину програмера да се распитају и избегну проблеме у вези са неким посебним кључевима као што је конструктор. Препоручује се да ако пронађемо било који објекат који има било које својство, он ће подразумевано користити хасОвнПроперти(). У случају присуства функције намењене да изврши позив провером објекта за тоСтринг() метод, морамо користити ин.