
20.01.2015, 20:15
|
Аспирант
|
|
Регистрация: 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.
|
|

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

20.01.2015, 20:26
|
Аспирант
|
|
Регистрация: 15.01.2015
Сообщений: 39
|
|
Сообщение от dimy44
|
но приходится пересматривать привычные вещи (например прототипы, а не классы, итд)
|
Не приходится, видимо. Иначе спасибо за эту феерию бреда тут не наблюдалось бы. Хотите классов как в питоне, используйте байнд или замыкания. Чтобы врубиться в прототипы, или классы в стиле смолток/руби, придется включить мозг.
|
|

20.01.2015, 20:33
|
Интересующийся
|
|
Регистрация: 12.01.2015
Сообщений: 15
|
|
Давайте закончим споры, я ответ на свой вопрос получил, для этого тему и создавал. Для флуда разве здесь нету курилки etc?
|
|

20.01.2015, 20:36
|
Аспирант
|
|
Регистрация: 15.01.2015
Сообщений: 39
|
|
Сообщение от dimy44
|
я ответ на свой вопрос получил
|
получили от меня. Ваша хотелка невозможна в JS в общем случае. Не надо путать объект с хешем.
А спрорить я и не собираюсь.
|
|

20.01.2015, 20:45
|
Интересующийся
|
|
Регистрация: 12.01.2015
Сообщений: 15
|
|
registrant, от Вас я получил только информацию, что Python это говноязык. Мне ответил участник в посте #2, я сразу реализовал то что хотел. Думал, тема закрыта.
|
|

20.01.2015, 20:48
|
Аспирант
|
|
Регистрация: 15.01.2015
Сообщений: 39
|
|
Сообщение от dimy44
|
Мне ответил
|
Да он что-то там ответил. Если Вас интересует не правильный ответ, а первый встретившийся, тогда норм.
И я не буду тратить больше на Вас время.
|
|

20.01.2015, 21:04
|
Интересующийся
|
|
Регистрация: 12.01.2015
Сообщений: 15
|
|
Меня это решение устроило. В моем случае это не тот js, о который здесь обсуждают, это фреймворк на андроид, там урезано много, приходится выкручиваться.
|
|

20.01.2015, 21:20
|
 |
Быдлокодер;)
|
|
Регистрация: 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);

|
|

20.01.2015, 21:47
|
Аспирант
|
|
Регистрация: 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)
Все правильно работает, пока цирк не уехал.
|
|
|
|