Ошибка в геттере
Вложений: 1
В чем тут ошибка??? Может у меня что-то не так с браузером и я предоставлю еще и скрин.
<script> var ob={ i:null, set i(p){ i=p;}, get i(){ return i;}, } ob.i; </script> |
<script> var ob={ i:null, get iGet(){ return this.i;}, set iSet(p){ this.i=p;} } alert(ob.i); ob.i = "Test"; alert(ob.i); </script> |
DGGDAK47,
может так ? <script> "use strict"; var ob={ y:null, set i(p){ this.y=p;}, get i(){ return this.y;} } alert(ob.i) </script> |
Dilettante_Pro,
alert(ob.iGet); ??? |
DGGDAK47,
<script> "use strict"; var ob={ set i(p){ this.y=p;}, get i(){ return this.y;} } Object.defineProperty(ob, "y", {value: null,enumerable: false, writable: true}); alert(ob.i) alert(Object.keys(ob)) </script> |
Сам спросил - сам ответил
Позже я разобрался как ето работает (геттеры и сеттеры) и сейчас я это опишу.может пригодится кому...
Создавая аксессоры get и set-подразумевается,что при вызове set,он создаст нужное свойство,равное имени связанных аксессоров и нужного свойства,с которым они будут работать,между собой.Они перекроют ранее созданное свойство,с таким же именем и поэтому не нужно создавать свойство для них. Моя ошибка была в том,что я создал отдельно свойство и думал,что создав аксессоры,они свяжутся с ним по имени,но они его перекрывали.Это и объясняет,что в get я вызывал return на несуществующее свойство,до вызова set. Надеюсь кому-то этот материал поможет,лол. Помимо этого,еще следует ознакомиться с атрибутами свойств. |
рони,
Цитата:
<script> var ob={ i:null, get iGet(){ return this.i;}, set iSet(p){ this.i=p;} } alert(ob.iGet); ob.i = "Test"; alert(ob.iGet); </script> |
Dilettante_Pro,
вы создали новое свойство , мой вариант тот же(но дополнительное свойство "спрятано" enumerable: false,). хотя как сказано выше достаточно было так var ob={ set i(p){ i=p;}, get i(){ return i;} } ob.i=null;//сначала установить значение alert(ob.i); |
рони,
Ну а у меня все свойства доступны - чем больше, тем лучше ! :dance: |
Часовой пояс GMT +3, время: 14:11. |