Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
6 / 6 / 0
Регистрация: 26.06.2016
Сообщений: 68

Как вернуть все свойства объекта?

13.01.2019, 13:27. Показов 3061. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть объект:

JavaScript
1
var mycar = {make: 'Honda', model: 'Accord', year: 1998};
Как мне вернуть все свойства объекта mycar. Под всеми свойствами, я подразумеваю, его собственные свойства + все свойства его прототипов.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.01.2019, 13:27
Ответы с готовыми решениями:

Как просмотреть все свойства объекта.
Может кто знает как просмотреть все свойства объекта??? Например пусть есть некоторый обект ob1 = new String('Привет'); у него есть...

Как вернуть предыдущие свойства компонента
Делаю таблицу квадратов. Сделал саму таблицу. Сделал так же поле куда вводиться двузначное число и выделяется в таблице нужный квадрат....

Наследование, анимация, шарик. Реализовать 3 объекта TBall2, наследующие все свойства от TBall
Здравствуйте, товарищи. Вот делал я один проект - там шарики летают по форме, шарики все занесены в массив Balls, каждый элемент которого...

13
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
13.01.2019, 13:41
vvshnik14, да хоть обычным циклом, просто не делать проверку hasOwnProperty()
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
13.01.2019, 14:14
vvshnik14, у литерала объекта перечисляемых свойств прототипа не будет. Так что без плюса получается.
JavaScript
1
2
3
4
        let mycar = { make: 'Honda', model: 'Accord', year: 1998 };
 
        for (let property in mycar)
            console.log(`["${property}"]: ${mycar[property]}`);
Или задача - повытаскивать вообще что попало? В том числе и тип Symbol?
0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
13.01.2019, 14:41
Цитата Сообщение от amr-now Посмотреть сообщение
у литерала объекта перечисляемых свойств прототипа не будет.
Теперь уже я не понял...
JavaScript
1
2
3
4
5
6
7
8
9
10
let mycar = {
  make: 'Honda',
  model: 'Accord',
  year: 1998
};
 
Object.setPrototypeOf(mycar, {
  proto1: 1,
  proto2: 2
});
0
6 / 6 / 0
Регистрация: 26.06.2016
Сообщений: 68
13.01.2019, 15:37  [ТС]
Цитата Сообщение от amr-now Посмотреть сообщение
Или задача - повытаскивать вообще что попало? В том числе и тип Symbol?
пока этот вопрос меня интересует в образовательные целях - поэтому да вытащить всё, что позволяет сам язык.

Ещё поясню, почему я задаю такой вопрос:
Исходя из этого текста: Любой объект, в данном примере и пользовательский mycar, должен наследовать все свойства объекта конструктора Object. Но по факту это не так. Вот и возникает вопрос - почему?
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
13.01.2019, 16:07
Цитата Сообщение от vvshnik14 Посмотреть сообщение
должен наследовать все свойства объекта конструктора Object. Но по факту это не так.
Почему не так? Объясните.

В Javascript наследование внутри слегка отличается от наследования в C#.
В JS к условному "вагончику" экземпляра в нормальном смысле прицепляются и "вагончики" прототипов.
Образуется "поезд" из "вагончиков" экземпляра и прототипов.
----
Вы задачу не пояснили.
Вытащить и неперечисляемые свойства из каждого вагончика?
Вытащить Symbol из каждого вагончика?
Вытащить геттеры и сеттеры из каждого вагончика?
А методы до кучи тоже вытащить?
0
6 / 6 / 0
Регистрация: 26.06.2016
Сообщений: 68
13.01.2019, 16:38  [ТС]
Цитата Сообщение от amr-now Посмотреть сообщение
Почему не так? Объясните.
JavaScript
1
2
3
4
5
var mycar = {make: 'Honda', model: 'Accord', year: 1998};
var mass = Object.getOwnPropertyNames(Object); // свойства Object
for (var key in mass){
    document.writeln("<font color='071bf7'>"+ mass[key] +"</font> - "+(mass[key] in mycar)+"</br>");
} // возвращает каждое свойство Object, которое через оператор in проверяет, если такое свойство в объекте и его прототипах [B]mycar[/B]
Цитата Сообщение от amr-now Посмотреть сообщение
Образуется "поезд" из "вагончиков" экземпляра и прототипов.
я понимаю что у каждого объекта, есть единственный прототип, у прототипа тоже единственный прототип и так далее по цепочке.

Цитата Сообщение от amr-now Посмотреть сообщение
Вытащить и неперечисляемые свойства из каждого вагончика?
как я понимаю последний вагончик может обращаться к свойствам всех предыдущих вагончиков, и да вытащить все свойства которые есть у объекта

Цитата Сообщение от amr-now Посмотреть сообщение
Вытащить Symbol из каждого вагончика?
вы про то,что Symbol как имя свойства , делает свойство не перечислимым?

Цитата Сообщение от amr-now Посмотреть сообщение
Вытащить геттеры и сеттеры из каждого вагончика?
плаваю в этой теме - но как понимаю, так называемые методы инкапсуляции?

Цитата Сообщение от amr-now Посмотреть сообщение
А методы до кучи тоже вытащить?
На сколько я понимаю: в свойства объекта попадают все типы значений: объекты(объекта, функции, массивы и т.д) и примитивные значения, поэтому ответ как и на первый вопрос - да все свойства
0
566 / 465 / 183
Регистрация: 14.10.2017
Сообщений: 1,259
13.01.2019, 18:45
vvshnik14, а вывести объект в консоль и там поглядеть?
1
6 / 6 / 0
Регистрация: 26.06.2016
Сообщений: 68
13.01.2019, 19:21  [ТС]
klopp спасибо, не знал об этом. Но как перебирать эти свойства непосредственно в коде?
И ещё одно но.
Первый объект в который меня заинтересовал,конкретнее какие в нём есть свойства - это [object HTMLDivElement] (<div></div> в html), я перебрал его свойства(их там достаточно много, перебирал через for in, понял что он возвращает только перечисляемые свойства, соответственно они не все), о чем ещё спрашивал в этой теме. Так вот если этот объект передать в console.log() - то консоль возвращает просто html разметку.
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
13.01.2019, 20:45
Где-то так. Авторы языка навертели с Symbol. Считаю извращением.
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
</head>
<body>
    <script>
        let mycar = { make: 'Honda', model: 'Accord', year: 1998 };
 
        let obj = mycar;
 
        do {
            console.log(obj.constructor && obj.constructor.name ? obj.constructor.name.toUpperCase() : "НЕИЗВЕСТНЫЙ ТИП");
            ownMembers(obj);
            obj = Object.getPrototypeOf(obj);
        } while (obj);
 
        function ownMembers(obj) {
            for (let item of ownPropertyValues(obj)) {
                console.log(`property-value ${item}`);
                console.log(Object.getOwnPropertyDescriptor(obj, item));
            }
 
            for (let item of ownMethods(obj)) {
                console.log(`method ${item}`);
                console.log(Object.getOwnPropertyDescriptor(obj, item));
            }
 
            for (let item of ownGetters(obj)) {
                console.log(`get ${item}`);
                console.log(Object.getOwnPropertyDescriptor(obj, item));
            }
            for (let item of ownSetters(obj)) {
                console.log(`set ${item}`);
                console.log(Object.getOwnPropertyDescriptor(obj, item));
            }
        }
 
        function ownPropertyValues(chainLink) {
            return Reflect.ownKeys(chainLink).filter(item => {
                let descriptor = Object.getOwnPropertyDescriptor(chainLink, item);
                return descriptor.value && typeof descriptor.value !== "function";
            }).map(e => e.toString()).sort();
        }
 
        function ownMethods(chainLink) {
            return Reflect.ownKeys(chainLink).filter(item => {
                let descriptor = Object.getOwnPropertyDescriptor(chainLink, item);
                return typeof descriptor.value === "function";
            }).map(e => e.toString()).sort();
        }
 
        function ownGetters(chainLink) {
            return Reflect.ownKeys(chainLink).filter(item => {
                let descriptor = Object.getOwnPropertyDescriptor(chainLink, item);
                return typeof descriptor.get === "function";
            }).map(e => e.toString()).sort();
        }
 
        function ownSetters(chainLink) {
            return Reflect.ownKeys(chainLink).filter(item => {
                let descriptor = Object.getOwnPropertyDescriptor(chainLink, item);
                return typeof descriptor.get === "function";
            }).map(e => e.toString()).sort();
        }
    </script>
</body>
</html>
Добавлено через 1 минуту
Цитата Сообщение от vvshnik14 Посмотреть сообщение
если этот объект передать в console.log() - то консоль возвращает просто html разметку.
Для html-элементов надо использовать console.dir()
1
6 / 6 / 0
Регистрация: 26.06.2016
Сообщений: 68
13.01.2019, 20:58  [ТС]
amr-now, спасибо. Буду разбираться.
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
13.01.2019, 22:04
vvshnik14, мне тоже непонятно, почему иногда свойство-функция является свойством, а иногда методом.

Буду разбираться.

(С Symbol там просто из-за преобразования имени в строку. Отвратительная конструкция. На сайте MDN обозначается двумя собаками, которых по факту нет)

У сеттеров set подправил ))
JavaScript
1
2
3
4
5
6
        function ownSetters(chainLink) {
            return Reflect.ownKeys(chainLink).filter(item => {
                let descriptor = Object.getOwnPropertyDescriptor(chainLink, item);
                return typeof descriptor.set === "function";
            }).map(e => e.toString()).sort();
        }
0
6 / 6 / 0
Регистрация: 26.06.2016
Сообщений: 68
15.01.2019, 09:57  [ТС]
Цитата Сообщение от amr-now Посмотреть сообщение
мне тоже непонятно, почему иногда свойство-функция является свойством, а иногда методом.
возможно это связано с контекстом выполнения:

если в функции this ссылается на глобальный объект(для браузера это window) - то свойство-функция

а, если в функции this ссылается на любой не глобальный объект - то свойство-метод
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
16.01.2019, 13:10
Покрасивее обрабатываются Symbol (без потери полного дескриптора):
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<!DOCTYPE HTML>
<html>
 
<head>
    <meta charset="utf-8">
</head>
 
<body>
    <script>
        let mycar = { make: 'Honda', model: 'Accord', year: 1998 };
 
        let obj = document.body;//mycar;
 
        do {
            console.log(obj.constructor && obj.constructor.name ? obj.constructor.name.toUpperCase() : "НЕИЗВЕСТНЫЙ ТИП");
            ownMembers(obj);
            obj = Object.getPrototypeOf(obj);
        } while (obj);
 
        //console.log(Object.getOwnPropertyDescriptors(obj));
 
        function ownMembers(obj) {
            for (let item of ownPropertyValues(obj)) {
                console.log(`property-value ${item.toString()}`);
                console.log(Object.getOwnPropertyDescriptor(obj, item));
            }
 
            for (let item of ownMethods(obj)) {
                console.log(`method ${item.toString()}`);
                console.log(Object.getOwnPropertyDescriptor(obj, item));
            }
 
            for (let item of ownGetters(obj)) {
                console.log(`get ${item.toString()}`);
                console.log(Object.getOwnPropertyDescriptor(obj, item));
            }
            for (let item of ownSetters(obj)) {
                console.log(`set ${item.toString()}`);
                console.log(Object.getOwnPropertyDescriptor(obj, item));
            }
        }
 
        function ownPropertyValues(chainLink) {
            return Reflect.ownKeys(chainLink).filter(item => {
                let descriptor = Object.getOwnPropertyDescriptor(chainLink, item);
                return descriptor.hasOwnProperty("value") && typeof descriptor.value !== "function";
            }).sort(comparer);
        }
 
        function ownMethods(chainLink) {
            return Reflect.ownKeys(chainLink).filter(item => {
                let descriptor = Object.getOwnPropertyDescriptor(chainLink, item);
                return typeof descriptor.value === "function";
            }).sort(comparer);
        }
 
        function ownGetters(chainLink) {
            return Reflect.ownKeys(chainLink).filter(item => {
                let descriptor = Object.getOwnPropertyDescriptor(chainLink, item);
                return typeof descriptor.get === "function";
            }).sort(comparer);
        }
 
        function ownSetters(chainLink) {
            return Reflect.ownKeys(chainLink).filter(item => {
                let descriptor = Object.getOwnPropertyDescriptor(chainLink, item);
                return typeof descriptor.set === "function";
            }).sort(comparer);
        }
 
        function comparer(a, b) {
            return (a.toString() > b.toString()) - (b.toString() > a.toString());
        }
    </script>
</body>
</html>
Хотя вопросов остаётся масса.
Обработчик события тоже формально является геттером/сеттером,
а в MDN обработчики идут отдельным разделом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.01.2019, 13:10
Помогаю со студенческими работами здесь

Как вернуть окно с описание выделенного свойства элемента?
При выделении свойства в конструкторе, должно появляться описание этого свойства(см. вложение). Полазил в настройках, не нашел. Как его...

Создать Generic Mapper, который будет мапить схожие свойства одного объекта в свойства другого
Нужно создать generic mapper, который будет мапить схожие(similar) свойства одного объекта в свойства другого(по имени и типу) меду двумя...

Как перебрать свойства объекта?
Возможно ли это в принципе и если да , то как? В Visual Basic 6 Desktop эта возможность объявляется, но не описывается - сказано только...

Как вернуть результат функции в литерал объекта
Всем здасьте, Пытаюсь написать скрипт рулетки. Ссылка на файлы Затык в следующем - при нажатии на кнопку start запускается function...

Как правильно инициализировать свойства объекта?
Добрый день, товарищи-форумчане! Помогите с VB net. Имеется следующий класс Partial Public Class pledgeNotificationPackageType ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru