Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.03.2018, 16:44
Новичок на форуме
Отправить личное сообщение для 375291601334 Посмотреть профиль Найти все сообщения от 375291601334
 
Регистрация: 05.03.2018
Сообщений: 9

наследование свойств от 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>


Буду рада любым мыслям по этому поводу)

Последний раз редактировалось 375291601334, 05.03.2018 в 17:08.
Ответить с цитированием
  #2 (permalink)  
Старый 05.03.2018, 16:52
Новичок на форуме
Отправить личное сообщение для 375291601334 Посмотреть профиль Найти все сообщения от 375291601334
 
Регистрация: 05.03.2018
Сообщений: 9

мне нужно, чтобы
object[property] = propertyValue;
изменило значение свойства Object, а вместо этого создается новое свойство объекта object
Ответить с цитированием
  #3 (permalink)  
Старый 05.03.2018, 18:23
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Интересно... Унаследованное свойство есть, имеет значение, а объект пустой
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));
Ответить с цитированием
  #4 (permalink)  
Старый 05.03.2018, 18:51
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,127

Сделал свойство неперечисляемым через специальную функцию а потом удивляешься куда оно делось =).

https://developer.mozilla.org/ru/doc..._of_properties вдруг кому поможет.
Ответить с цитированием
  #5 (permalink)  
Старый 05.03.2018, 19:59
Новичок на форуме
Отправить личное сообщение для 375291601334 Посмотреть профиль Найти все сообщения от 375291601334
 
Регистрация: 05.03.2018
Сообщений: 9

да, мне и нужно сделать так, чтобы свойство было неперечисляемым(
Ответить с цитированием
  #6 (permalink)  
Старый 05.03.2018, 20:01
Новичок на форуме
Отправить личное сообщение для 375291601334 Посмотреть профиль Найти все сообщения от 375291601334
 
Регистрация: 05.03.2018
Сообщений: 9

MallSerg, задача в том, чтобы можно было создать объект и присвоить значение неперечисляемому, наследумому от Object свойству
Ответить с цитированием
  #7 (permalink)  
Старый 05.03.2018, 20:02
Новичок на форуме
Отправить личное сообщение для 375291601334 Посмотреть профиль Найти все сообщения от 375291601334
 
Регистрация: 05.03.2018
Сообщений: 9

MallSerg,
А у меня вместо того, чтобы присвоить значение наследуемому свойству, создается новое свойство(
Ответить с цитированием
  #8 (permalink)  
Старый 05.03.2018, 22:27
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,127

Объект и его прототип это два разных объекта.
Проблема в том что к свойствам одного из этих объектов можно обратится с помощью наследования.
Просто нужно вспомнить как ищется свойство у объекта.

т.е. «object.property» и «object.__proto__.property» это два разных свойства у двух разных объектов.
просто при вызове object.property создается новое свойство которое перекрывает свойство прототипа.
По хорошему нужно сохранить ссылку на свойство в переменной и работать через него или же напрямую работать с
Object.property вместо object.property

у Dilettante_Pro все перечисляемое просто невнимательно посмотрел на свойства =).
Ответить с цитированием
  #9 (permalink)  
Старый 05.03.2018, 22:38
Новичок на форуме
Отправить личное сообщение для 375291601334 Посмотреть профиль Найти все сообщения от 375291601334
 
Регистрация: 05.03.2018
Сообщений: 9

MallSerg,
Да, спасибо, все верно)
Только почему тогда даже такой код не работает:

const createNotEnumerableProperty = () => {
Object.defineProperty(Object.prototype, propertyName, {
  enumerable: true,
  configurable: true,
  writable: true,
  value: 'empty'});
return '__proto__.property';  }


Просто для моего задания важно сохранить структуру записи object[property] = propertyValue;
Ответить с цитированием
  #10 (permalink)  
Старый 05.03.2018, 22:40
Новичок на форуме
Отправить личное сообщение для 375291601334 Посмотреть профиль Найти все сообщения от 375291601334
 
Регистрация: 05.03.2018
Сообщений: 9

MallSerg,
опять же создается новое свойство object.__proto__.property, которое не сохраняет атрибуты свойства объекта Object
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ajax запрос к Wcf сервису возвращает Object Object Itogoo333 Общие вопросы Javascript 6 13.01.2016 03:02
Множественное наследование, супер методы, наследование дескрипторов nerv_ Оффтопик 28 19.03.2014 20:48
динамическое обновление свойств объекта в цикле grego Общие вопросы Javascript 3 04.12.2013 23:29
Борьба с Object.defineProperty в IE8 FINoM Оффтопик 46 04.09.2012 23:45
функция копирования свойств zzz Общие вопросы Javascript 44 17.08.2009 12:04