JS и его "недостатки"
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.123] |
|
|
Правила раздела:
| Страницы: (66) « Первая ... 58 59 [60] 61 62 ... 65 66 ( Перейти к последнему сообщению ) |
JS и его "недостатки"
|
Сообщ.
#886
,
|
|
|
|
JS калечит мозг, это очевидно. Увидел такую НЁХ на одном форуме как пример «гибкости»:
![]() ![]() ob = function(arg) { var prop = 1, meth = function(x) { return x+x; }; return eval(arg) } console.log( ob("meth(prop)") ) Автор еще и утверждает, что это объект. |
|
Сообщ.
#887
,
|
|
|
|
Цитата korvin @ Автор еще и утверждает, что это объект. В js вообще все объект, так что тут он, наверное, прав. И это единственное в чем он прав - НЁХ абсолютная, да еще и с eval. Автор долбоящер. |
|
Сообщ.
#888
,
|
|
|
|
Цитата Астарот @ В js вообще все объект Кроме флоатов, стрингов и интеджеров - это примитивы с объектным интерфейсом =) |
|
Сообщ.
#889
,
|
|
|
|
Цитата Астарот @ В js вообще все объект, так что тут он, наверное, прав. В чем тут проявляется «объектность»? З.Ы. Говорить «все есть объект» — это все равно, что говорить «все есть предмет». Что такое объект (в JS хотя бы)? Добавлено Благо, что (по моим тестам по крайней мере, может упустил чего) ob("prop = 123"); не меняет значения переменной. С другой стороны его вообще сложно изменить: http://ideone.com/4OK1t4 Вот второе в моем понимании вполне объект, а первое — нет. |
|
Сообщ.
#890
,
|
|
|
|
Цитата korvin @ З.Ы. Говорить «все есть объект» — это все равно, что говорить «все есть предмет». Что такое объект (в JS хотя бы)? объекты в JS передаются по ссылке и имеют возможность издеваться над исходником (т.е. исходными данными), т.е. изменять исходный объект. С примитивом всё наоборот - передаётся только по значению и исходный вариант изменить нельзя. Если объявил int 42, то это будет 42 до конца жизни Добавлено например: ![]() ![]() var a = "asd"; a[0] = "b"; console.log(a); // asd - строка это примитив с другой стороны: ![]() ![]() var a = ['a', 's', 'd']; a[0] = "b"; console.log(a.join('')); // bsd - уже объект |
|
Сообщ.
#891
,
|
|
|
|
То есть объект в JS — это любые мутабельные данные? Оригинально...
|
|
Сообщ.
#892
,
|
|
|
|
Цитата korvin @ То есть объект в JS — это любые мутабельные данные? Оригинально... ну в большинстве ЯП это так, объект - это что-то более сложное, нежели просто данные (т.е. мутабельный тип) + передаётся по ссылке. Взять хоть руби или пых =) на счёт питонки - не скажу |
|
Сообщ.
#893
,
|
|
|
|
Цитата Serafim @ С примитивом всё наоборот - передаётся только по значению и исходный вариант изменить нельзя. Если объявил int 42, то это будет 42 до конца жизни Да правда что. Замыканием это "никогда" превращает в "когда хочу". |
|
Сообщ.
#894
,
|
|
|
|
К слову - в PHP примитивы (ака скаляры) - это: массив (он же хеш), флоат (он же дабл), интеджер, стринг, булево - они передаются по значению, всё остальное - генераторы (сопрограммы), замыкания, объекты, ресурсы и прочее - по ссылке. Разница между PHP и JS лишь в том, что в первом - есть метод clone() и языковая конструкция "&" для указания передачи по значению или по ссылке любых типов данных. В JS же - такого нет, по-этому для передачи массива по значению - используется магия, вроде: [1, 2, 3].splice(0), для инстансов - проход по прототипу и клонирование функций\свойств отдельно в новый объект, ну и т.д. А что бы передать примитив по ссылке - придётся геммороиться трындец как, например оборачивать в функцию, которая устанавливает\возвращает значение
Короче большая Ж =))) Добавлено Цитата MyNameIsIgor @ Замыканием это "никогда" превращает в "когда хочу". безымянная функция - тоже вроде ссылочный тип. Осталось придумать способ сохранить значение этого "никогда" внутри этого замыкания, дабы оно не ковертилось в "когда-хочу" =) |
|
Сообщ.
#895
,
|
|
|
|
Цитата Serafim @ безымянная функция - тоже вроде ссылочный тип Я это и не опровергал. Цитата Serafim @ Осталось придумать способ сохранить значение этого "никогда" внутри этого замыкания, дабы оно не ковертилось в "когда-хочу" В этом вашем недоскрипте замыкается всё по ссылке. И при замыкании мы получаем либо ссылку на примитивные данные, либо ссылку на ссылку на объект Например. |
|
Сообщ.
#896
,
|
|
|
|
Цитата MyNameIsIgor @ Например. паринь, палехче, у меня к концу рабочего дня и так мозг уезжает, а тут ещё JS сверху |
|
Сообщ.
#897
,
|
|
|
|
Цитата Serafim @ паринь, палехче А щито такое? Здесь же полтемы посвящено обзыванию меня неосилятором этого замечательнейшего наилегчайшего язычга |
|
Сообщ.
#898
,
|
|
|
|
этот наилегчайший яп до сих пор пенетрирует мне мозг своей косорукостью, благодаря ооп моего головного мозга =))
|
|
Сообщ.
#899
,
|
|
|
|
Цитата MyNameIsIgor @ В этом вашем недоскрипте замыкается всё по ссылке. И при замыкании мы получаем либо ссылку на примитивные данные, либо ссылку на ссылку на объект Например. И где там замыкание? Добавлено С замыканием вот так что ли будет http://ideone.com/nh8noG |
|
Сообщ.
#900
,
|
|
|
|
Цитата MyNameIsIgor @ А щито такое? Здесь же полтемы посвящено обзыванию меня неосилятором этого замечательнейшего наилегчайшего язычга а, не, всё верно. Ты же объявил var i в глобальном контектсе, вот JS и обращается к ней, когда ты пишешь i = newvalue Добавлено Цитата Serafim @ Ты же объявил var i в глобальном контектсе, вот JS и обращается к ней, когда ты пишешь i = newvalue Во, астя всё верно написал |