logo

JavaScript има собствено свойство

В този урок ще видим аспектите на ограниченията и функциите, свързани с hasOwnProperty() метод в JavaScript. Ще научим и за неговите реализации и използване в разделите.

Въведение

в JavaScript , методът hasOwnProperty() се дефинира като свойство, за да се гарантира дали обектът принадлежи към споменатия проект или не. Ако се установи, че свойството принадлежи на разпознат обект, то трябва да върне изход, базиран на булев оператор, т.е. вярно или невярно.

Синтаксис

 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 

Един важен аспект, който трябва да се отбележи тук, е, че методът hasOwnProperty() обикновено игнорира наследените свойства. Това означава, че методът трябва да върне своя true, ако се установи, че обектът има ненаследено свойство и името е указано от propname. Ако върне false, това означава, че обектът няма никакво свойство с определено име или е наследил свойството от обекта на proptype.

 // 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() е, че той може да инициализира обект, като следва концепцията за предаване на низ като аргумент по подразбиране. Той трябва да отговори бързо с true, ако се установи, че стойността е достъпна за обекта. В противен случай ще върне false, ако не бъде намерен. Може да се демонстрира с помощта на кодовия фрагмент, даден по-долу.

 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 

В кодовия фрагмент, даден по-горе, променливата създава нов обект, Кола . Сега може да се каже, че автомобилът е иницииран, като неговите свойства и име са дефинирани в конструктора. Въпреки че цветът може да не бъде споменат в обекта при стартиране, той винаги ще бъде наличен в прототипа йерархия . Следователно hasOwnProperty() винаги ще връща true за името, но за цвета ще връща false.

Що се отнася до производителността, hasOwnProperty() работи гладко, докато си проправя път през обекта с цикли. Досега можем да кажем, че ако свойствата конкретно принадлежат на обекта. Те нямат никаква връзка с прототипа. Демонстрацията на това може да бъде показана с помощта на кодовия фрагмент, даден по-долу.

 // 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(), той може да стане безполезен, тъй като изобразяването на обекта се случва при дефиниране на свойство с име hasOwnProperty. За да подкрепите това, опитайте се да разберете кодовия фрагмент, даден по-долу.

масиви за програмиране на java
 var harrypotter = { hasOwnProperty: function() { return true; } }; // Outputs: true console.log(harrypotter.hasOwnProperty('ridikulus')); 

В горния кодов фрагмент е очевидно, че harrypotter вече има hasOwnProperty. По този начин той никога няма да направи извикване към object.prototype.hasOwnProperty. Предполага се, че това може да срещне случаи, в които може да позволи извършване на повикване, но в крайна сметка може да се провали. Така че винаги се препоръчва да сте наясно с възможността за обаждания. Кодовият фрагмент по-долу показва неговото решение.

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

В горния кодов фрагмент е ясно, че harrypotter дефинира свой собствен hasOwnProperty . Той никога няма да направи извиквания към Object.prototype.hasOwnProperty, защото има възможност да върне false, ако срещне някои случаи, когато стойността е false и става трудно да накарате нещата да работят зад ъгъла. За да подкрепите това твърдение, вижте кодовия фрагмент, даден по-долу.

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

Подобно на hasOwnProperty, има друг метод, наречен 'in' метод. Използва се и за проверка дали ключът е наличен за обекта или не. Въпреки това е важно да се отбележи, че ключовата разлика между метода hasOwnProperty и in се крие във факта, че методът in няма да следва реда на разграничаване между свойствата, които се наследяват, и тези, които наследените свойства са специално създадени за обекта. Това може да се покаже с помощта на кодовия фрагмент, даден по-долу.

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

В горния кодов фрагмент е очевидно, че методът „in“ следва свойството на конструктора на Object.prototype, откъдето всички обекти се наследяват.

За да добавя няколко точки, има недостатък и за двата метода. И двата метода могат лесно да ни дадат информация за свойство, което вече е декларирано, но не могат да ни кажат за свойството, съдържащо реална стойност.

java база данни jdbc

Обмислете следния кодов фрагмент, който показва как и двата метода изпълняват това заобиколно решение.

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

Заключение

В този урок обсъдихме метода hasOwnProperty() в JavaScript. Като цяло този метод е чудесен избор за повечето разработчици, за да се допитат и да избегнат проблеми, свързани с някои специални ключове като конструктор. Препоръчва се, ако намерим обект с някакво свойство, той да използва hasOwnProperty() по подразбиране. В случай на наличие на функция, предназначена да направи извикване чрез проверка на обекта за метода toString(), трябва да използваме in.