Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   антипод eval (https://javascript.ru/forum/misc/52932-antipod-eval.html)

registrant 20.01.2015 20:15

Цитата:

Сообщение от 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)

dimy44 20.01.2015 20:16

registrant, ясно. Это Ваше мнение, спорить не буду.
kobezzza, спасибо за разъяснения. Я не программист, это хобби, пишу себе на смартфон приложения для себя, вот недавно открыл js, времни мало, постигаю потихоньку тонкости). Сложностей не испытываю, но приходится пересматривать привычные вещи (например прототипы, а не классы, итд)

registrant 20.01.2015 20:26

Цитата:

Сообщение от dimy44
но приходится пересматривать привычные вещи (например прототипы, а не классы, итд)

Не приходится, видимо. Иначе спасибо за эту феерию бреда тут не наблюдалось бы. Хотите классов как в питоне, используйте байнд или замыкания. Чтобы врубиться в прототипы, или классы в стиле смолток/руби, придется включить мозг.

dimy44 20.01.2015 20:33

Давайте закончим споры, я ответ на свой вопрос получил, для этого тему и создавал. Для флуда разве здесь нету курилки etc?

registrant 20.01.2015 20:36

Цитата:

Сообщение от dimy44
я ответ на свой вопрос получил

получили от меня. Ваша хотелка невозможна в JS в общем случае. Не надо путать объект с хешем.
А спрорить я и не собираюсь.

dimy44 20.01.2015 20:45

registrant, от Вас я получил только информацию, что Python это говноязык. Мне ответил участник в посте #2, я сразу реализовал то что хотел. Думал, тема закрыта.

registrant 20.01.2015 20:48

Цитата:

Сообщение от dimy44
Мне ответил

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

И я не буду тратить больше на Вас время.

dimy44 20.01.2015 21:04

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

kobezzza 20.01.2015 21:20

Цитата:

Сообщение от registrant (Сообщение 352428)
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);


:D

registrant 20.01.2015 21:47

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)

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


Часовой пояс GMT +3, время: 22:58.