05.1 Vytvoření objektu
Výuka
Proč objekty?
Objekt je základní datová struktura v JavaScriptu pro seskupování souvisejících dat a funkcionalit. Místo desítek samostatných proměnných můžeš vše uložit do jednoho logického celku.
Proč to potřebujeme?
- Organizace kódu - Seskupit související data dohromady
- Modelování reality - Reprezentovat věci ze skutečného světa (uživatel, produkt, auto)
- Struktura dat - Klíč-hodnota páry pro snadný přístup
- Encapsulation - Data a funkce (metody) pohromadě
Představ si to jako: Složka s dokumenty. Místo rozházených papírů (jednotlivé proměnné) máš vše pěkně ve složce (objekt) s označenými kartami (klíče/properties).
Jak to funguje?
Objekt:
1. Kontejner pro pojmenované hodnoty (properties)
2. Syntaxe: { klíč: hodnota, klíč2: hodnota2 }
3. Klíče jsou stringy (nebo symboly)
4. Hodnoty můžou být jakýkoliv typ (čísla, stringy, pole, funkce, objekty)
5. Přístup přes tečku (obj.key) nebo závorky (obj['key'])
Klíčové koncepty
- Object literal - způsob vytvoření objektu:
{} - Properties (vlastnosti) - pojmenované hodnoty v objektu
- Key-value páry - klíč (název) a hodnota
- Dot notation - přístup přes tečku:
obj.name - Bracket notation - přístup přes závorky:
obj['name'] - Object constructor - alternativní způsob:
new Object()
JavaScript
Příklad 1: Základní object literal
// Vytvoření objektu
const person = {
name: 'Alice',
age: 25,
city: 'Praha'
};
console.log(person);
// → { name: 'Alice', age: 25, city: 'Praha' }
// Přístup k vlastnostem (dot notation)
console.log(person.name);
// → Alice
console.log(person.age);
// → 25
Co se stalo?
{ }vytvoří nový objektname: 'Alice'- klíčnamemá hodnotu'Alice'- Oddělujeme čárkami
- Přístup přes tečku:
person.name
Příklad 2: Prázdný objekt a přidávání vlastností
// Prázdný objekt
const car = {};
console.log(car);
// → {}
// Přidání vlastností
car.brand = 'Toyota';
car.model = 'Camry';
car.year = 2020;
console.log(car);
// → { brand: 'Toyota', model: 'Camry', year: 2020 }
// Můžeš přidat i později
car.color = 'red';
console.log(car.color);
// → red
Co se stalo?
{}vytvoří prázdný objektcar.brand = 'Toyota'přidá vlastnostbrand- Můžeš přidávat vlastnosti kdykoliv
Příklad 3: Různé typy hodnot v objektu
const user = {
name: 'Bob', // string
age: 30, // number
active: true, // boolean
hobbies: ['čtení', 'sport'], // pole
address: { // vnořený objekt
city: 'Brno',
zip: '60200'
}
};
console.log(user.name);
// → Bob
console.log(user.hobbies[0]);
// → čtení
console.log(user.address.city);
// → Brno
Co se stalo?
- Hodnoty můžou být jakýkoliv typ
- Můžeš vnořit pole nebo jiné objekty
- Přístup přes tečku můžeš řetězit:
user.address.city
Příklad 4: Bracket notation (závorková notace)
const person = {
name: 'Alice',
age: 25,
'full name': 'Alice Johnson' // Klíč s mezerou
};
// Bracket notation
const key = 'name';
console.log(person[key]);
// → Alice (přístup přes proměnnou)
// Klíč s mezerou
console.log(person['full name']);
// → Alice Johnson (dot notation by nefungovalo)
// Dynamický přístup
const fields = ['name', 'age'];
fields.forEach(field => {
console.log(`${field}: ${person[field]}`);
});
// → name: Alice
// → age: 25
Co se stalo?
- Bracket notation:
obj['key'] - Užitečná pro dynamické klíče (hodnota v proměnné)
- Pro klíče s mezerami nebo speciálními znaky
- Můžeš použít výrazy:
obj[1 + 2]
Příklad 5: Object constructor (alternativní způsob)
// Pomocí new Object()
const person1 = new Object();
person1.name = 'Charlie';
person1.age = 35;
console.log(person1);
// → { name: 'Charlie', age: 35 }
// Object literal (preferovaný způsob)
const person2 = {
name: 'David',
age: 40
};
console.log(person2);
// → { name: 'David', age: 40 }
// Jsou ekvivalentní
console.log(typeof person1); // → object
console.log(typeof person2); // → object
Co se stalo?
new Object()vytvoří prázdný objekt- Object literal
{}je preferovaný - kratší a čitelnější - Oba způsoby jsou funkční, ale literal je standardní
Příklad 6: Zkrácená syntaxe (property shorthand)
const name = 'Eve';
const age = 28;
const city = 'Ostrava';
// Dlouhý způsob
const person1 = {
name: name,
age: age,
city: city
};
// Zkrácená syntaxe (ES6+)
const person2 = {
name,
age,
city
};
console.log(person2);
// → { name: 'Eve', age: 28, city: 'Ostrava' }
// Můžeš kombinovat
const person3 = {
name, // zkrácená
age, // zkrácená
country: 'ČR' // normální
};
console.log(person3);
// → { name: 'Eve', age: 28, country: 'ČR' }
Co se stalo?
- Property shorthand:
{ name }místo{ name: name } - Použije se název proměnné jako klíč
- Čistší kód, méně opakování
TypeScript
TypeScript přidává typovou kontrolu objektů pomocí interface nebo type.
Stejné příklady s typy
// Interface pro objekt
interface Person {
name: string;
age: number;
city: string;
}
// Objekt s typem
const person: Person = {
name: 'Alice',
age: 25,
city: 'Praha'
};
// TypeScript zkontroluje, že objekt odpovídá interface
// const invalid: Person = {
// name: 'Bob',
// age: 'thirty' // ❌ Error: Type 'string' is not assignable to type 'number'
// };
// Chybějící vlastnost
// const incomplete: Person = {
// name: 'Charlie'
// // ❌ Error: Property 'age' is missing
// };
// Volitelné vlastnosti
interface User {
name: string;
age: number;
email?: string; // volitelná (? znamená optional)
}
const user1: User = {
name: 'David',
age: 30
// email není povinný
};
const user2: User = {
name: 'Eve',
age: 28,
email: 'eve@example.com'
};
// Type alias (alternativa k interface)
type Car = {
brand: string;
model: string;
year?: number;
};
const car: Car = {
brand: 'Toyota',
model: 'Camry'
};
// Vnořené objekty
interface Address {
city: string;
zip: string;
}
interface UserWithAddress {
name: string;
age: number;
address: Address; // vnořený objekt
}
const userWithAddress: UserWithAddress = {
name: 'Frank',
age: 35,
address: {
city: 'Brno',
zip: '60200'
}
};
// Inline typ (bez interface)
const product: { name: string; price: number } = {
name: 'Laptop',
price: 25000
};
TypeScript přidává:
- ✅ Typovou kontrolu - nemůžeš přiřadit špatný typ
- ✅ Autocomplete - IDE ti napovídá vlastnosti
- ✅ Volitelné vlastnosti -
?pro optional properties - ✅ Prevenci chyb - upozorní na chybějící nebo přebývající vlastnosti
Rozdíl JS vs TS
JavaScript:
- Objekty fungují bez typové kontroly
- Můžeš přidat jakoukoliv vlastnost kdykoliv
- Flexibilnější, ale nebezpečnější
TypeScript:
- Objekty mají definovanou strukturu (interface/type)
- TypeScript zkontroluje, že objekt odpovídá typu
- Bezpečnější, prevence chyb
// JavaScript - projde, ale může způsobit problémy
const person = {
name: 'Alice',
age: 25
};
person.address = 'Praha'; // OK, přidá vlastnost
// TypeScript - kontrola
interface Person {
name: string;
age: number;
}
const person: Person = {
name: 'Alice',
age: 25
};
// person.address = 'Praha'; // ❌ Error: Property 'address' does not exist on type 'Person'
// Musíš rozšířit interface nebo použít jiný typ
Tip
💡 Preferuj object literal {} místo new Object():
// ❌ Zbytečně složité
const obj = new Object();
obj.name = 'Alice';
// ✅ Jednodušší a čistší
const obj = {
name: 'Alice'
};
💡 Používej property shorthand pro čistší kód:
const name = 'Bob';
const age = 30;
// ❌ Opakování
const person = {
name: name,
age: age
};
// ✅ Zkrácená syntaxe
const person = {
name,
age
};
💡 Používej TypeScript interface pro jasné struktury:
// ✅ Definuj strukturu objektu
interface User {
name: string;
age: number;
email?: string;
}
// Teď máš autocomplete a typovou kontrolu
const user: User = {
name: 'Alice',
age: 25
};
Kvíz
Co vypíše tento kód?
const key = 'age';
const person = {
name: 'Alice',
age: 25
};
console.log(person.key);
❌ - To by fungovalo s person[key] (bracket notation)
✅ - - person.key hledá vlastnost s názvem "key" (literal)
personnemá vlastnostkey, proto vracíundefined- Správně by bylo:
person[key](bracket notation) person[key]→person['age']→25
❌ - person.key nehledá hodnotu proměnné key
❌ - Není to chyba, jen vrací undefined
Důležité: Dot notation (obj.key) bere název literálně, bracket notation (obj[key]) vyhodnotí výraz (např. proměnnou)!
Důležité: Dot notation (obj.key) bere název literálně, bracket notation (obj[key]) vyhodnotí výraz (např. proměnnou)!
🎯 Závěrečný projekt
Po dokončení všech 8 dílů vytvoříte jednoduchou Todо aplikaci v čistém JavaScriptu. Naučíte se, jak aplikovat vše, co jste se naučili, na reálný projekt.
Zobrazit podrobnosti projektu →Informace o seriálu
Obtížnost
Délka
Cca 480 minut
Počet videí
8 videí + projekty
Certifikát
Po dokončení obdržíte certifikát
Lekce v této sekci
- 05.1 Vytvoření objektu
- 05.2 Vlastnosti
- 05.3 Metody objektu
- 05.4 This keyword
- 05.5 Destructuring objektů
- 05.6 Spread u objektů
- 05.7 Optional chaining
- 05.8 Nullish coalescing
- 05.9 Object.keys/values/entries
- 05.10 Computed properties
- 05.11 Getters a setters
- 05.12 Object.freeze/seal
Struktura lekcí (souborový strom)
- 1.1 Úvod do JavaScriptu a TypeScriptu
- 1.2 Nastavení prostředí
- 1.3 První program
- 1.4 Proměnné: var, let, const
- 1.5 Datové typy - přehled
- 1.6 String (řetězce)
- 1.7 Number (čísla)
- 1.8 Boolean (pravda/nepravda)
- 1.9 Null a Undefined
- 1.10 Type Inference vs Annotations
- 1.11 Aritmetické operátory
- 1.12 Porovnávací operátory
- 1.13 Logické operátory
- 1.14 Komentáře
- 1.15 Console metody
- 03.01 Deklarace funkce
- 03.02 Function Expression
- 03.03 Arrow Functions
- 03.04 Parametry a argumenty
- 03.05 Return hodnoty
- 03.06 Výchozí parametry
- 03.07 Rest parametry
- 03.08 Co je Scope
- 03.09 Lexikální Scope
- 03.10 Řetězec Scope
- 03.11 Globální Scope
- 03.12 Životní Cyklus Proměnných
- 03.13 Omezení Scope
- 03.14 Použití Closures
- 03.15 Callback funkce
- 03.16 Higher-order Functions
- 03.17 IIFE
- 03.18 Void funkce
- 03.19 Rekurze
- v přípravě
- v přípravě
- v přípravě
- v přípravě
- 01 — Co je Next.js
- 02 — Vytvoření projektu
- 03 — Struktura projektu (app/)
- 04 — Page komponenty (page.js / page.tsx)
- 05 — Layout komponenty (layout.js / layout.tsx)
- 06 — File-based routing
- 07 — Dynamické routy ([id]/page.js)
- 08 — Link komponenta (navigace)
- 09 — Image komponenta (next/image)
- 10 — Metadata (title, description, Open Graph)
- 11 — Loading UI (loading.js / loading.tsx)
- 12 — Error handling (error.js / error.tsx)
- 13 — Not Found (not-found.js / not-found.tsx)
- v přípravě
- v přípravě
- v přípravě