Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получить из переменной имя объекта 
V
    Опции темы
Sanchezzz
Дата 26.7.2013, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 3
Всего: 60



Добрый день.
Как получить имя объекта как в console.log
Что бы было понятно о чем идет речь я выделил красной линией на скрине.
http://s1.ipicture.ru/uploads/20130726/ppzUEnGQ.png


Я уже перепробовал несколько варинатов
среди них
{}.call(b).toString()   // отказался работать
b.toString();               // object
typeof                        // object

Кросбраузерность не волнует использую только хром, это видно по скрину.

Это сообщение отредактировал(а) Sanchezzz - 26.7.2013, 12:31


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Arantir
Дата 26.7.2013, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 14
Всего: 55



У объектов нет имен. Вы говорите об имени переменной.
Не думаю, что это возможно - получить имя переменной, в которой лежит объект. Вы ведь... как бы... и так его (имя) используете...
Тем более, если на этот объект ссылается куча разных переменных.


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Sanchezzz
Дата 26.7.2013, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 3
Всего: 60



Я думаю можно получить консоль лог ведь как то это умудряться делать, я уже готов и в исходники влезть=)

Оффтоп
Наткнулся на интересный момент в JS5  можно создать имена переменных в таком стиле var ಠ_ಠ = 'privet';



--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
JAYBE
Дата 26.7.2013, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 27.3.2008

Репутация: нет
Всего: 0



Да никак без создания дополнителньных метдов для прототипов. или организации назначения id создаваемым объектам.
PM   Вверх
Sanchezzz
Дата 26.7.2013, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 3
Всего: 60



печалька в nodejs тоже по этому поводу пусто.
прототипы в каждый обьект тоже не очень дело.

как же console.log определяет имя обьекта 
Не ужели в цикле window пробегает в тупом сравнении instanceof? 






--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
akizelokro
Дата 26.7.2013, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 2
Всего: 5



Chrome работает на движке WebKit (Также Safari, новая Opera и т.д.).
На картинке у тебя дебаггер, для того чтобы вывести туда объект с его методами, всё, что угодно можно сделать. но, скорее всего, используется достаточно стандартный способ из WebKit'овской реализации JavaScript c дебаггером.
А поточнее о задаче можно?
Я у тебя вижу подчёркнутыми даже несколько объектов, часть их которых являются свойствами объекта THREE, который, как мне подсказывает интуиция, играет здесь роль пространства имён.


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
Arantir
Дата 26.7.2013, 23:13 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 14
Всего: 55



Не исключено, что имя переменной для console.log запоминается еще на уровне интерпретации кода. Или берется откуда-то поглубже, чем сам JS. Из более низкоуровневых системных вызовов в процессе выполнения кода. 
Такая себе низкоуровневая библиотечка для отладки.

Посмотрите на тот же xdebug для PHP. Он тоже много чего интересного может вывести в виде текста, но из-под PHP тоже не все из того доступно. Просто xdebug - это дополнение на C. И ему доступны средства, недоступные в самом PHP.




--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
akizelokro
Дата 26.7.2013, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 2
Всего: 5



Ладно, залез в статью одного умного человека. И там написано, что объекты в JavaScript это "словари", набор пары, ключа (строка, она же имя переменной) и значения.


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
Arantir
Дата 26.7.2013, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 14
Всего: 55



Да, но, опять же, у многих ключей может быть одно и то же значение. Или многие могут ссылаться на тот же объект. Так что банальным перебором наверняка не узнаешь. Отношение "значение -> ключ" не является тут однозначным.
Тем не менее, отладчик так глупо не ошибается никогда.


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Sanchezzz
Дата 27.7.2013, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 3
Всего: 60



Цитата

На картинке у тебя дебаггер, для того чтобы вывести туда объект с его методами, всё, что угодно можно сделать. но, скорее всего, используется достаточно стандартный способ из WebKit'овской реализации JavaScript c дебаггером.

console это стандартный webkit отладчик такой же как и в хроме, с хорошим API для вывода в эту консоль все что угодно, но не получения.
Вывести туда все что угодно можно это не нужно, скрин был сделал для того что я хочю получить имя ссылки объекта.

Цитата

Ладно, залез в статью одного умного человека. И там написано, что объекты в JavaScript это "словари", набор пары, ключа (строка, она же имя переменной) и значения. 

Все созданные переменные без использования пространства (function(){

}); 
Хранятся в глобальной видимости в объекте window, это можно отнести к словарю коллекции 



Я рассматриваю только возможности nodejs(v8) или webkit.
Для себя я выбрал node-webkit и за хорошей производительности в WEbGL, 61 фпс стабильно. в хроме у меня было 35.
плюс еще то что приложение можно запустить как программу на linux mac win
из коробки доступен v8, нету ограничений, которые можно получить в браузере, ноде-хром в одном флаконе.
для постройки интерфейса редактирования. 

Это нужно что бы было легко модифицировать параметры обьекта.
Править в ручную векторы матриц обьекта,  подправить в realtime шейдеры задать для них текстуры и другие uniform параметры



Это сообщение отредактировал(а) Sanchezzz - 27.7.2013, 13:18


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
akizelokro
Дата 27.7.2013, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 2
Всего: 5



Самый простой способ это (не учитываю пока вариант скачать WebKit и использовать исходники для написания своего браузера с дебаггером) это задать метод, например, начинающийся с подчеркивания, которое принято считать используемым для системных вещей), что-то вида

Код

var dog;

dog._myDescription = "dog";

alert(dog._myDescription);



Вообще-то, что-то подобное и должен делать сам интерпретатор. Не знаю, как он расфутболивает анонимные функции (функции тоже объекты в JS по сути, но отличать интерпретатор должен и анонимные функции.

Добавлено @ 16:09
Цитата

Да, но, опять же, у многих ключей может быть одно и то же значение. Или многие могут ссылаться на тот же объект. Так что банальным перебором наверняка не узнаешь. Отношение "значение -> ключ" не является тут однозначным.
Тем не менее, отладчик так глупо не ошибается никогда. 


Есть области видимости. 
А так, насколько я понимаю, уникальными являются два прототипа остальных объектов, это null и Object.prototype

Это сообщение отредактировал(а) akizelokro - 27.7.2013, 16:10


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
Arantir
Дата 27.7.2013, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 14
Всего: 55



Цитата(akizelokro @  27.7.2013,  14:57 Найти цитируемый пост)
Есть области видимости. 

Да, но... 
Это не очень помогает найти имя переменной вручную. Области видимости в JS недоступны программисту так же, как имена переменных. Нельзя, например, получить "все видимые переменные в этой строчке программы".

Я то в курсе, как интерпретатор работает, но я имел ввиду, что способ хранения объектов в JS все равно не поможет найти имя переменной.

Фактически, программист оперирует не с переменными, а со значениями, находящимися в них. Имена переменных нужны лишь для общения человека с машиной и имеют физический смысл только на уровне интерпретации.
Чтобы иметь это имя для использования в программе, его надо тоже превратить в значение некой переменной. К примеру, как предложено чуть выше.


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
akizelokro
Дата 27.7.2013, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 2
Всего: 5



Есть одна идейка, щас посмотрю.


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
Sanchezzz
Дата 27.7.2013, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 3
Всего: 60



В общем люди не мучайтесь фиг с этой  затеей. 
Напишу тучу условий, для нужных мне полей а не для всех.
Спасибо всем.

Это сообщение отредактировал(а) Sanchezzz - 27.7.2013, 22:49


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
akizelokro
Дата 28.7.2013, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 2
Всего: 5



Есть возможный финт ушами, например:

Код

var kroki = "5";
var foo = kroki; // сохранить
kroki = new Kroki(..); // создать через конкструкто
alert(kroki.constructor.prototype); // здесь может что-то и вывести, в частности разок получил "object String() {[native code]}" для kroki.constructor
kroki = foo; // восстанавливаем значение



--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0848 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.