наследование свойств от Object
Может сможет кто помочь?
Хочу задать для Object свойство propertyName (это переменная, может принимать любое значение), чтобы все наследники получили доступ к этому свойству. Потом для наследника Object - object пытаюсь изменить значение этого свойства, но вместо этого создается новое свойство для object.
const createNotEnumerableProperty = () => {
Object.defineProperty(Object.prototype, propertyName, {
enumerable: true,
configurable: true,
writable: true,
value: 'empty'});
return propertyName; }
Вот код в html:
</head>
<body>
<script src="final.js"></script>
<script>
const propertyName = 'property';
const propertyValue = 'value';
const property = createNotEnumerableProperty(propertyName);
const object = {};
object[property] = propertyValue;
</script>
</body>
</html>
Буду рада любым мыслям по этому поводу) |
мне нужно, чтобы
object[property] = propertyValue;изменило значение свойства Object, а вместо этого создается новое свойство объекта object :-E |
Интересно... Унаследованное свойство есть, имеет значение, а объект пустой
const createNotEnumerableProperty = () => {
Object.defineProperty(Object.prototype, propertyName, {
enumerable: true,
configurable: true,
writable: true,
value: 'empty'});
return propertyName; }
const propertyName = 'property';
const propertyValue = 'value';
const prop = createNotEnumerableProperty(propertyName);
alert(prop);
const object = {};
alert(object.property);
alert(object[prop]);
alert(JSON.stringify(object));
// object.property = propertyValue;
// alert(JSON.stringify(object));
|
Сделал свойство неперечисляемым через специальную функцию а потом удивляешься куда оно делось =).
https://developer.mozilla.org/ru/doc..._of_properties вдруг кому поможет. |
да, мне и нужно сделать так, чтобы свойство было неперечисляемым(
|
MallSerg, задача в том, чтобы можно было создать объект и присвоить значение неперечисляемому, наследумому от Object свойству
|
MallSerg,
А у меня вместо того, чтобы присвоить значение наследуемому свойству, создается новое свойство( |
Объект и его прототип это два разных объекта.
Проблема в том что к свойствам одного из этих объектов можно обратится с помощью наследования. Просто нужно вспомнить как ищется свойство у объекта. т.е. «object.property» и «object.__proto__.property» это два разных свойства у двух разных объектов. просто при вызове object.property создается новое свойство которое перекрывает свойство прототипа. По хорошему нужно сохранить ссылку на свойство в переменной и работать через него или же напрямую работать с Object.property вместо object.property у Dilettante_Pro все перечисляемое просто невнимательно посмотрел на свойства =). |
MallSerg,
Да, спасибо, все верно) Только почему тогда даже такой код не работает:
const createNotEnumerableProperty = () => {
Object.defineProperty(Object.prototype, propertyName, {
enumerable: true,
configurable: true,
writable: true,
value: 'empty'});
return '__proto__.property'; }
Просто для моего задания важно сохранить структуру записи object[property] = propertyValue; |
MallSerg,
опять же создается новое свойство object.__proto__.property, которое не сохраняет атрибуты свойства объекта Object |
| Часовой пояс GMT +3, время: 16:49. |