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, время: 06:41. |