Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 20.01.2015, 20:15
Аспирант
Посмотреть профиль Найти все сообщения от registrant
 
Регистрация: 15.01.2015
Сообщений: 39

Сообщение от kobezzza
встроенный метод toSource (это и есть антипод eval)
o={a: 1}
a=Object.create(o)
alert(a.a)
alert(eval((a.toSource()).a))
alert(eval(a.toSource()).a)
alert(eval(a.toSource())===a)

Последний раз редактировалось registrant, 20.01.2015 в 20:21.
Ответить с цитированием
  #12 (permalink)  
Старый 20.01.2015, 20:16
Интересующийся
Отправить личное сообщение для dimy44 Посмотреть профиль Найти все сообщения от dimy44
 
Регистрация: 12.01.2015
Сообщений: 15

registrant, ясно. Это Ваше мнение, спорить не буду.
kobezzza, спасибо за разъяснения. Я не программист, это хобби, пишу себе на смартфон приложения для себя, вот недавно открыл js, времни мало, постигаю потихоньку тонкости). Сложностей не испытываю, но приходится пересматривать привычные вещи (например прототипы, а не классы, итд)
Ответить с цитированием
  #13 (permalink)  
Старый 20.01.2015, 20:26
Аспирант
Посмотреть профиль Найти все сообщения от registrant
 
Регистрация: 15.01.2015
Сообщений: 39

Сообщение от dimy44
но приходится пересматривать привычные вещи (например прототипы, а не классы, итд)
Не приходится, видимо. Иначе спасибо за эту феерию бреда тут не наблюдалось бы. Хотите классов как в питоне, используйте байнд или замыкания. Чтобы врубиться в прототипы, или классы в стиле смолток/руби, придется включить мозг.
Ответить с цитированием
  #14 (permalink)  
Старый 20.01.2015, 20:33
Интересующийся
Отправить личное сообщение для dimy44 Посмотреть профиль Найти все сообщения от dimy44
 
Регистрация: 12.01.2015
Сообщений: 15

Давайте закончим споры, я ответ на свой вопрос получил, для этого тему и создавал. Для флуда разве здесь нету курилки etc?
Ответить с цитированием
  #15 (permalink)  
Старый 20.01.2015, 20:36
Аспирант
Посмотреть профиль Найти все сообщения от registrant
 
Регистрация: 15.01.2015
Сообщений: 39

Сообщение от dimy44
я ответ на свой вопрос получил
получили от меня. Ваша хотелка невозможна в JS в общем случае. Не надо путать объект с хешем.
А спрорить я и не собираюсь.
Ответить с цитированием
  #16 (permalink)  
Старый 20.01.2015, 20:45
Интересующийся
Отправить личное сообщение для dimy44 Посмотреть профиль Найти все сообщения от dimy44
 
Регистрация: 12.01.2015
Сообщений: 15

registrant, от Вас я получил только информацию, что Python это говноязык. Мне ответил участник в посте #2, я сразу реализовал то что хотел. Думал, тема закрыта.
Ответить с цитированием
  #17 (permalink)  
Старый 20.01.2015, 20:48
Аспирант
Посмотреть профиль Найти все сообщения от registrant
 
Регистрация: 15.01.2015
Сообщений: 39

Сообщение от dimy44
Мне ответил
Да он что-то там ответил. Если Вас интересует не правильный ответ, а первый встретившийся, тогда норм.

И я не буду тратить больше на Вас время.
Ответить с цитированием
  #18 (permalink)  
Старый 20.01.2015, 21:04
Интересующийся
Отправить личное сообщение для dimy44 Посмотреть профиль Найти все сообщения от dimy44
 
Регистрация: 12.01.2015
Сообщений: 15

Меня это решение устроило. В моем случае это не тот js, о который здесь обсуждают, это фреймворк на андроид, там урезано много, приходится выкручиваться.
Ответить с цитированием
  #19 (permalink)  
Старый 20.01.2015, 21:20
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от registrant Посмотреть сообщение
o={a: 1}
a=Object.create(o)
alert(a.a)
alert(eval((a.toSource()).a))
alert(eval(a.toSource()).a)
alert(eval(a.toSource())===a)
(function () {
	var toSource = Object.prototype.toSource;

	Object.defineProperty(Object.prototype, 'toSource', {
		 writable: true,
		 configurable: true,
		 enumerable: false,
		 value: function () {
			var clone = {};
			
			for (var key in this) {
				clone[key] = this[key];
			}
			
			return toSource.call(clone);
		}
	});
})();

var a = {a: 1};
var b = {
	__proto__: a, 
	c: 1,
};

alert(eval(b.toSource()).a);


__________________
kobezzza
code monkey
Ответить с цитированием
  #20 (permalink)  
Старый 20.01.2015, 21:47
Аспирант
Посмотреть профиль Найти все сообщения от registrant
 
Регистрация: 15.01.2015
Сообщений: 39

kobezzza,
(function () {
    var toSource = Object.prototype.toSource;
 
    Object.defineProperty(Object.prototype, 'toSource', {
         writable: true,
         configurable: true,
         enumerable: false,
         value: function () {
            var clone = {};
             
            for (var key in this) {
                clone[key] = this[key];
            }
             
            return toSource.call(clone);
        }
    });
})();
 
var a = {a: 1};
var b = {
    __proto__: a,
    c: 1,
};
 
alert(eval(b.toSource())===b);

Но ты можешь проще выйти из этой ситуации
Object.prototype.toSource=function(){return this}
 
var a = {a: 1};
var b = {
    __proto__: a,
    c: 1,
};
 
alert(eval(b.toSource().a))
alert(eval(b.toSource())===b)

Все правильно работает, пока цирк не уехал.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятное(для меня) поведение eval FanAizu Общие вопросы Javascript 1 06.05.2014 19:43
Обработка json tion Общие вопросы Javascript 15 12.05.2013 18:39
Как вызвать eval в контексте другой функции для доступа к ее локальным переменным? Почемучкин Общие вопросы Javascript 8 29.10.2012 22:31
Не работает eval в IE ..::Silence::.. Общие вопросы Javascript 8 25.03.2009 13:16
Roll-up menu Tanya Общие вопросы Javascript 5 29.08.2008 17:28