W JavaScript często pojawia się potrzeba skopiowania właściwości z jednego obiektu do drugiego. Może to być przydatne w wielu scenariuszach, takich jak łączenie konfiguracji, aktualizowanie stanów obiektów, czy tworzenie kopii obiektów z zachowaniem pewnych właściwości. W tej lekcji przejdziemy przez różne sposoby kopiowania właściwości między obiektami w JavaScript.
Sposoby kopiowania właściwości
- Pętla for...in: Tradycyjna metoda iteracji po wszystkich własnych wyliczalnych właściwościach obiektu.
- Object.assign(): Metoda służąca do kopiowania wartości wszystkich własnych wyliczalnych właściwości z jednego lub więcej źródłowych obiektów do obiektu docelowego.
- Spread operator (...): Nowoczesna składnia pozwalająca na łatwe kopiowanie właściwości obiektów.
Przykład z kodem
Rozważmy następujący scenariusz: mamy obiekt reprezentujący konfigurację domyślną aplikacji i chcemy zaktualizować tę konfigurację na podstawie obiektu z konfiguracją użytkownika. Oto jak możemy to zrobić:
HTML + JavaScript
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Copy Object Properties Example</title>
</head>
<body>
    <script>
        // Obiekt z domyślną konfiguracją
        const defaultConfig = {
            theme: "light",
            notifications: true,
            location: "home"
        };
        // Obiekt z konfiguracją użytkownika
        const userConfig = {
            theme: "dark",
            location: "work"
        };
        // Kopiowanie właściwości z userConfig do defaultConfig
        // Metoda 1: Pętla for...in
        for (const key in userConfig) {
            if (userConfig.hasOwnProperty(key)) {
                defaultConfig[key] = userConfig[key];
            }
        }
        // Metoda 2: Object.assign()
        // const updatedConfig = Object.assign({}, defaultConfig, userConfig);
        // Metoda 3: Spread operator
        // const updatedConfig = {...defaultConfig, ...userConfig};
        console.log(defaultConfig);
        // console.log(updatedConfig); // Użyj, gdy korzystasz z metody 2 lub 3
    </script>
</body>
</html>
Wyjaśnienie
- W powyższym przykładzie najpierw definiujemy dwa obiekty: defaultConfigz domyślnymi ustawieniami iuserConfigz ustawieniami dostarczonymi przez użytkownika.
- Następnie, używamy pętli for...indo iteracji po wszystkich właściwościachuserConfigi kopiowania ich dodefaultConfig. Warto zauważyć, że przed kopiowaniem sprawdzamy, czy właściwość faktycznie należy do obiektuuserConfigza pomocąhasOwnProperty(), aby uniknąć niezamierzonego kopiowania właściwości dziedziczonych.
- Alternatywnie, moglibyśmy użyć Object.assign()lub operatora rozproszenia (...) do osiągnięcia tego samego efektu bez bezpośredniej modyfikacji obiektudefaultConfig, tworząc zamiast tego nowy obiektupdatedConfigzawierający połączenie obu konfiguracji.
Podsumowanie
Kopiowanie właściwości między obiektami w JavaScript jest powszechnym zadaniem, które można wykonać na kilka różnych sposobów. Wybór metody zależy od konkretnego przypadku użycia, w tym od tego, czy chcemy modyfikować istniejące obiekty czy tworzyć nowe.
Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs video JavaScript w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.

