get и set свойства объекта
Здравствуйте.
console.clear(); let obj = { }; // объект как модельный организм )) let propObj = { // объект для опрделения свойства value: "No msg", enumerable: true, writable: true, configurable: true, set Msg(msg){ this.prop = msg; }, get Msg(){ return this.prop; } }; Object.defineProperty( obj, "prop", propObj );// определяем св-во console.log( obj ); // { prop: "No msg" } console.log( obj.Msg ); // undefined - почему? obj.Msg = "myMsgText"; console.log( obj.Msg ); // "myMsgText" здесь уже нормально почему при вызове console.log( obj.Msg ); первый раз, получаем undefined? |
Luca,
Цитата:
|
"вон оно чё, Михалыч" )
Цитата:
|
А где вы видите в этой статье, что в Object.defineProperty можно указывать именованные get/set ?? У вас эти ф-ии просто не вызываются, а идёт обычное присвоение/получение свойства Msg у объекта - отсюда и результат.
Вам надо так: let obj = { prop: "no msg", set Msg(msg){ this.prop = msg; }, get Msg(){ return this.prop; } }; console.log( obj ); console.log( obj.Msg ); obj.Msg = "myMsgText"; console.log( obj.Msg ); |
чтобы не плодить темы доплнительные здесь задам ещё вопрос по теме:
var o = { data_prop: "value", get accessor_prop() { return accessor_prop; }, set accessor_prop(value) { accessor_prop = value + "_set_"; } }; console.log(o); o.accessor_prop = "Yes"; console.log(o.accessor_prop); console.log(o); получается, что нам не обязательно создавать само св-во accessor_prop? почему сей пример работает без волшебного слова this? |
разобрался
|
Часовой пояс GMT +3, время: 00:44. |