Object.defineProperties - czym różnią się te przykłady?

0

Mój przykład, dostaję undefined.

const vehicle1 = {};
Object.defineProperties(vehicle1, {
    property1: {
        speed: 200
    }
}); console.log(vehicle1.property1);

Teraz przykład lekko przerobiony z dokumentacji, daje wynik 50:

const object1 = {};
Object.defineProperties(object1, {
    property1: {
        value: 50
    }
}); console.log(object1.property1);

Dlaczego w moim jest undefined? Przecież to jest 1 do 1, tylko inna nazwa zmiennej, co swoją drogą po zmianie nie ma różnicy i dalej mam undefined. Nie ogarniam, o co chodzi?

1

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperties
Bo musi być value. Przez value ustalasz wartość właściwości, a nie jej nazwę.

The value associated with the property. Can be any valid JavaScript value (number, object, function, etc). Defaults to undefined.

tylko inna nazwa zmiennej,

Nazwa właściwości, a nie zmiennej.

Ale jak się domyślam chcesz ustawić właściwość speed. To raczej powinieneś coś takiego zrobić:

const object1 = {};
Object.defineProperties(object1, {
    speed: {
        value: 50
    }
}); 
console.log(object1.speed);

Przy czym przy normalnym korzystaniu nie ma potrzeby używania defineProperties. Tzn. jest to pewna zaawansowana opcja, która czasem (i to raczej dość rzadko) może się przydać, ale na codzień można się bez niej obyć. Bo na codzień zrobiłbyś tak:

object1.speed = 50;

ale defineProperties i defineProperty mają jeszcze inne opcje jak ustawienie getterów/setterów (co również można zrobić inaczej: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get ) czy ustawienie, czy właściwość ma byc "enumerable".

The enumerable property attribute defines whether the property is picked by Object.assign() or spread operator. For non-Symbols properties it also defines whether it shows up in a for...in loop and Object.keys() or not.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty

1 użytkowników online, w tym zalogowanych: 0, gości: 1