Ошибка в геттере
Вложений: 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, время: 23:18. |