11.09.2017, 16:11
|
Новичок на форуме
|
|
Регистрация: 08.06.2017
Сообщений: 6
|
|
Ошибка в геттере
В чем тут ошибка??? Может у меня что-то не так с браузером и я предоставлю еще и скрин.
<script>
var ob={
i:null,
set i(p){ i=p;},
get i(){ return i;},
}
ob.i;
</script>
|
|
11.09.2017, 17:09
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
<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>
Последний раз редактировалось Dilettante_Pro, 11.09.2017 в 17:12.
|
|
11.09.2017, 17:15
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,123
|
|
DGGDAK47,
может так ?
<script>
"use strict";
var ob={
y:null,
set i(p){ this.y=p;},
get i(){ return this.y;}
}
alert(ob.i)
</script>
|
|
11.09.2017, 17:19
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,123
|
|
Dilettante_Pro,
alert(ob.iGet); ???
|
|
11.09.2017, 19:45
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,123
|
|
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>
|
|
11.09.2017, 19:52
|
Новичок на форуме
|
|
Регистрация: 08.06.2017
Сообщений: 6
|
|
Сам спросил - сам ответил
Позже я разобрался как ето работает (геттеры и сеттеры) и сейчас я это опишу.может пригодится кому...
Создавая аксессоры get и set-подразумевается,что при вызове set,он создаст нужное свойство,равное имени связанных аксессоров и нужного свойства,с которым они будут работать,между собой.Они перекроют ранее созданное свойство,с таким же именем и поэтому не нужно создавать свойство для них.
Моя ошибка была в том,что я создал отдельно свойство и думал,что создав аксессоры,они свяжутся с ним по имени,но они его перекрывали.Это и объясняет,что в get я вызывал return на несуществующее свойство,до вызова set.
Надеюсь кому-то этот материал поможет,лол.
Помимо этого,еще следует ознакомиться с атрибутами свойств.
|
|
12.09.2017, 11:43
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
рони,
Сообщение от рони
|
Dilettante_Pro,
alert(ob.iGet); ???
|
<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, 12.09.2017 в 11:45.
|
|
12.09.2017, 12:44
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,123
|
|
Dilettante_Pro,
вы создали новое свойство , мой вариант тот же(но дополнительное свойство "спрятано" enumerable: false,).
хотя как сказано выше достаточно было так
var ob={
set i(p){ i=p;},
get i(){ return i;}
}
ob.i=null;//сначала установить значение
alert(ob.i);
|
|
12.09.2017, 14:00
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
рони,
Ну а у меня все свойства доступны - чем больше, тем лучше !
|
|
|
|