Vlastnosti jsou nejdůležitější součástí jakéhokoli objektu JavaScriptu.
Vlastnosti jsou hodnoty spojené s objektem JavaScriptu.
Objekt JavaScriptu je kolekce neuspořádaných vlastností.
Vlastnosti lze obvykle měnit, přidávat a mazat, ale některé jsou pouze pro čtení.
Syntaxe pro přístup k vlastnosti objektu je:
objectName.property // person.age
nebo
objectName["property"] // person["age"]
nebo
objectName[expression] // x = "age"; person[x]
Výraz se musí vyhodnotit jako název vlastnosti.
person.firstname + " is " + person.age + " years old.";
Zkuste to sami →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Object Properties</h2>
<p>Access a property with .property:</p>
<p id="demo"></p>
<script>
const person = {
firstname: "John",
lastname: "Doe",
age: 50,
eyecolor: "blue"
};
document.getElementById("demo").innerHTML = person.firstname + " is " + person.age + " years old.";
</script>
</body>
</html>
person["firstname"] + " is " + person["age"] + " years old.";
Zkuste to sami →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Object Properties</h2>
<p>Access a property with ["property"]:</p>
<p id="demo"></p>
<script>
const person = {
firstname: "John",
lastname: "Doe",
age: 50,
eyecolor: "blue"
};
document.getElementById("demo").innerHTML = person["firstname"] + " is " + person["age"] + " years old.";
</script>
</body>
</html>
Příkaz for...in
JavaScriptu prochází vlastnosti objektu.
for (let variable in object) {
// code to be executed
}
Blok kódu uvnitř cyklu for...in
bude proveden jednou pro každou vlastnost.
Procházení vlastností objektu:
const person = {
fname:" John",
lname:" Doe",
age: 25
};
for (let x in person) {
txt += person[x];
}
Zkuste to sami →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Object Properties</h2>
<p>Looping object property values:</p>
<p id="demo"></p>
<script>
const person = {
fname:"John",
lname:"Doe",
age:25
};
let txt = "";
for (let x in person) {
txt += person[x] + " ";
}
document.getElementById("demo").innerHTML = txt;
</script>
</body>
</html>
K existujícímu objektu můžete přidat nové vlastnosti pouhým zadáním hodnoty.
Předpokládejme, že objekt osoby již existuje - pak mu můžete dát nové vlastnosti:
person.nationality = "English";
Zkuste to sami →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Object Properties</h2>
<p>Add a new property to an existing object:</p>
<p id="demo"></p>
<script>
const person = {
firstname: "John",
lastname: "Doe",
age: 50,
eyecolor: "blue"
};
person.nationality = "English";
document.getElementById("demo").innerHTML =
person.firstname + " is " + person.nationality + ".";
</script>
</body>
</html>
Klíčové slovo delete
odstraní vlastnost z objektu:
const person = {
firstName: "John",
lastName: "Doe",
age: 50,
eyeColor: "blue"
};
delete person.age;
Zkuste to sami →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Object Properties</h2>
<p>Deleting object properties.</p>
<p id="demo"></p>
<script>
const person = {
firstname: "John",
lastname: "Doe",
age: 50,
eyecolor: "blue"
};
delete person.age;
document.getElementById("demo").innerHTML =
person.firstname + " is " + person.age + " years old.";
</script>
</body>
</html>
nebo odstranit osobu["věk"];
const person = {
firstName: "John",
lastName: "Doe",
age: 50,
eyeColor: "blue"
};
delete person["age"];
Zkuste to sami →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Object Properties</h2>
<p>Deleting object properties.</p>
<p id="demo"></p>
<script>
const person = {
firstname: "John",
lastname: "Doe",
age: 50,
eyecolor: "blue"
};
delete person["age"];
document.getElementById("demo").innerHTML =
person.firstname + " is " + person.age + " years old.";
</script>
</body>
</html>
Klíčové slovo delete
odstraní hodnotu vlastnosti i samotnou vlastnost.
Po odstranění nelze vlastnost použít, dokud nebude znovu přidána.
The Operátor delete
je navržen pro použití ve vlastnostech objektu. Nemá to vliv na proměnné nebo funkce.
Operátor delete
by se neměl používat na předdefinovaný objekt JavaScript vlastnosti. Může dojít k pádu vaší aplikace.
Hodnoty v objektu mohou být jiným objektem:
myObj = {
name:"John",
age:30,
cars: {
car1:"Ford",
car2:"BMW",
car3:"Fiat"
}
}
K vnořeným objektům můžete přistupovat pomocí tečkové notace nebo závorky:
myObj.cars.car2;
Zkuste to sami →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Objects</h2>
<p>Access nested objects:</p>
<p id="demo"></p>
<script>
const myObj = {
name: "John",
age: 30,
cars: {
car1: "Ford",
car2: "BMW",
car3: "Fiat"
}
}
document.getElementById("demo").innerHTML = myObj.cars.car2;
</script>
</body>
</html>
nebo:
myObj.cars["car2"];
Zkuste to sami →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Objects</h2>
<p>Access nested objects:</p>
<p id="demo"></p>
<script>
const myObj = {
name: "John",
age: 30,
cars: {
car1: "Ford",
car2: "BMW",
car3: "Fiat"
}
}
document.getElementById("demo").innerHTML = myObj.cars["car2"];
</script>
</body>
</html>
nebo:
myObj["cars"]["car2"];
Zkuste to sami →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Objects</h2>
<p>Access nested objects:</p>
<p id="demo"></p>
<script>
const myObj = {
name: "John",
age: 30,
cars: {
car1: "Ford",
car2: "BMW",
car3: "Fiat"
}
}
document.getElementById("demo").innerHTML = myObj["cars"]["car2"];
</script>
</body>
</html>
nebo:
let p1 = "cars";
let p2 = "car2";
myObj[p1][p2];
Zkuste to sami →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Objects</h2>
<p>Access nested objects:</p>
<p id="demo"></p>
<script>
const myObj = {
name: "John",
age: 30,
cars: {
car1: "Ford",
car2: "BMW",
car3: "Fiat"
}
}
let p1 = "cars";
let p2 = "car2";
document.getElementById("demo").innerHTML = myObj[p1][p2];
</script>
</body>
</html>
Hodnoty v objektech mohou být pole a hodnoty v polích mohou být objekty:
const myObj =
{
name: "John",
age: 30,
cars: [
{name:"Ford",
models:["Fiesta", "Focus", "Mustang"]},
{name:"BMW", models:["320", "X3", "X5"]},
{name:"Fiat", models:["500", "Panda"]}
]
}
Chcete-li získat přístup k polím uvnitř polí, použijte pro každé pole smyčku for-in:
for (let i in myObj.cars) {
x += "<h1>" + myObj.cars[i].name
+ "</h1>";
for (let j in myObj.cars[i].models) {
x += myObj.cars[i].models[j];
}
}
Zkuste to sami →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<h2>Nested JavaScript Objects and Arrays.</h2>
<p id="demo"></p>
<script>
let x = "";
const myObj = {
name: "John",
age: 30,
cars: [
{name:"Ford", models:["Fiesta", "Focus", "Mustang"]},
{name:"BMW", models:["320", "X3", "X5"]},
{name:"Fiat", models:["500", "Panda"]}
]
}
for (let i in myObj.cars) {
x += "<h2>" + myObj.cars[i].name + "</h2>";
for (let j in myObj.cars[i].models) {
x += myObj.cars[i].models[j] + "<br>";
}
}
document.getElementById("demo").innerHTML = x;
</script>
</body>
</html>
Všechny vlastnosti mají svůj název. Kromě toho mají také hodnotu.
Hodnota je jedním z atributů vlastnosti.
Další atributy jsou: vyčíslitelný, konfigurovatelný a zapisovatelný.
Tyto atributy definují, jak lze k vlastnosti přistupovat (je čitelná?, je dá se to napsat?)
V JavaScriptu lze číst všechny atributy, ale pouze atribut value být změněn (a pouze pokud je vlastnost zapisovatelná).
( ECMAScript 5 má metody pro získání i nastavení všech vlastností atributy)
Objekty JavaScriptu dědí vlastnosti svého prototypu.
Klíčové slovo delete
nesmaže zděděné vlastnosti, ale pokud smažete vlastnost prototypu, ovlivní všechny objekty zděděné od prototypu.