
AKS
User-
Posts
297 -
Joined
-
Last visited
Content Type
Profiles
Forums
Calendar
Store
Everything posted by AKS
-
Будут интересные вопросы (с точки зрения здравого смысла) - появятся и ответы. Вы о каких объектах речь ведете? Разные алгоритмы - я ведь объяснял, а Вам, как о стену горох! Вы же призываете: "Чтобы не было голословных заявлений". Так что доказывайте, ведь Вы должны опровергнуть мое утверждение. Посмотрите, как это делаю я - что-то цитирую, на что-то ссылаюсь. И пусть Вам потребуется еще одна неделя, как в случае с алгоритмом zebra = function () {}; - ничего, не волнуйтесь, торопиться некуда.
-
Смешны Вы' date=' ваши заявления и ваши фрагменты кода. Ну вот' date=' я же писал, что Вы слепы. Да я вижу, что Вы ни черта не понимаете. Зачем Вы мне об этом напоминаете?
-
Я тоже не вижу ничего подобного. Плохо то, что Вы, плутая в трех соснах, оспариваете good practice, сформированную на лучшем, что есть в мировом опыте. На xpoint.ru я видел замечательный лозунг, который звучал примерно таким образом: "Неверный, но авторитетно звучащий ответ, хуже, чем отсутствие ответа". В данном случае налицо грубейшие ошибки дизайна программы. Кстати, это еще один показательный пример того, как ваши пространные рассказы о вашем пресловутом опыте рушатся, как карточные домики, стоит Вам показать себя "в деле". А дело не в том, что кто-то не воспринимает ваш код (всем тоже пофигу ваш код). Дело в том, что Вы афишируете подобный трешевый стиль, навязывая свое мнение, вместо того, чтобы делать выводы и исправляться. Я тоже уже говорил, что общение с Вами - бесполезное занятие. А выбор должен быть продиктован конкретными условиями. Я все объяснил. Как я уже писал, Вы или слепы, ли глупы. У Вас перед носом два алгоритма. Один состоит из двух пунктов, второй - из нескольких десятков. Ваш выбор в пользу второго - это еще одно свидетельство вашей безграмотности в подобных вопросах. Да не объявляется никакая переменная в глобальном контексте! Создается св-во глобального объекта, отличающееся от переменных хотя бы тем, что не имеет атрибута { DontDelete }. И вся проблема в том, как это св-во создается (уже объяснял, но Вам хоть кол на голове теши)!
-
Еще бы написали: "Стоило один раз ошибиться!" - хоть посмеялись бы. Поясните. Ну да, если еще приплести сюда что-нибудь, вроде "в масштабе вселенной это все мелочи", то разницы нет. Именно поэтому вашу точку зрения и вытекающие последствия Zeroglif назвал "почти что трэш из девяностых, некачественный со всех сторон, безыдейный, с конкретными ошибками, неорганизованный, просто откровенно слабый по форме и содержанию". Что ж, поскольку Вы этой разницы так и не признали, то я, как и обещал, щепчу себе под нос: "Горбатого могила исправит". Я привел конкретный пример! Описание двух вариантов говорит само за себя, и каждый вменяемый человек поймет то, какой из вариантов лучше. Доказывать уже нечего. Расскажите о том, какие выгоды несет ваш вариант zebra = function () {}; в данном контексте (что за ним стоит, кроме вашего упрямства).
-
В очередной раз показываете то, что у Вас совершенно неверное представление о происходящем! При этом reference варьируется в зависимости от типа данных. JScript: Если Вы считаете, что assignment to undeclared variable ? это фича, а не аномалия, подобная недоразумениям, вроде: 1. Оператор typeof возвращает "object" для операндов null value и Array object; 2. Значением [[Prototype]] property для arguments object является Object.prototype, а не Array.prototype (мне известно, что лишь Opera реализовала это логичным образом). 3. Значением [[Class]] property для RegExp.prototype, как утверждает спецификация, является "Object" (хотя эксперимент говорит об обратном: Object.prototype.toString.call(RegExp.prototype) -> object RegExp(Prototype) ). , а также другим недоработкам в языке, относящиеся к оператору with, функции eval, this value, идентификаторам FunctionExpression и проч. - это ваше право. Если Вы уверены, что в будущем assignment (как сейчас reference) to undeclared variable, не станет illegal ? пусть будет так. Если Вы не желаете обращать внимания на недвусмысленные намеки тех, кто занимается разработкой будущих версий языка: - как Вам угодно. Только потом не кусайте локти, когда на ваши претензии Вы получите ответ, вроде: "Не надо было пренебрегать рекомендациями касательно good/bad practice". Но, тем не менее, я попытаюсь "достучаться" в последний раз. Давайте посмотрим на проблему с другой стороны. Вы сами указали на алгоритм, который я теперь буду сравнивать с алгоритмом объявления функции. Замечу, что речь идет даже не о FunctionDeclaration vs VariableDeclaration, а о FunctionDeclaration vs Assignment to undeclared variable. При этом, если бы стоял вопрос о том, как создать объект-функцию, которая должна быть видна в любой области программы, используя объявление функции или используя присвоение объявленной переменной, ответ, в принципе, можно было бы обнаружить на поверхности. Нет ни логических, ни синтаксических, ни каких-либо других предпосылок для использования присвоения переменной значения объекта-функции, т.к. в данном случае нет ни условий, ни любых других структурных вариаций. Следовательно вывод прост ? если нужен объект-функция, то нужно просто создать этот объект, используя простой и понятный синтаксис FunctionDeclaration (о нем ? ниже). Вы же стоите за синтаксис, в котором отсутствует объявление переменной, поэтому показать то, насколько громоздок и неуклюж подобный алгоритм, будет довольно просто (еще наглядней, чем в случае с VariableDeclaration, о котором я не пишу ? придется поверить мне на слово). Я не буду включать в описание того и другого метода идентификации функции непосредственно этапы созданиея объекта-функции, т.к. это один и тот же процесс (13.2 Creating Function Objects). Итак, вот что должно произойти при вычислении такой строки function zebra () {}; (предложил WingedFox): Все предельно ясно и просто. А вот что должно произойти при вычислении такой строки zebra = function () {}; (предложили Вы): Если после подобного сравнения Вы будете по прежнему настаивать, что "Нет особой разницы. Оба варианта нормальные", то я уже ничего не смогу добавить. Я лишь тихо прошепчу себе под нос: "Горбатого могила исправит". Вот, кстати, ответ на ваш "вопрос на размышление, что должен вернуть код". У моего примера, конечно, мало общего с обсуждаемыми вопросами, но все же: (function x() { x = y = function y() {}; }()); alert([typeof x, typeof y]); // -> IE: "function,undefined", FF: "undefined,function" А вот пример того, как исчезает ваша zebra, хотя ее, как будто никто не "трогает" (будь у нее var - не исчезла бы): zebra = function () {}; (function (o) { with (o) { while (typeof zebra != 'undefined') { if (!delete zebra) { break; }; }; }; }({ zebra: 2 })); alert(typeof zebra); Примеры расчитаны на то, чтобы убавить желание использовать необъявленные переменные.
-
s0rr0w, хорошо, с этим разобрались. А теперь сделайте вывод - это все же bug, под который подогнали документацию, или что-то еще? Будет ли это исправлено в будущем, или в спецификации появится специальный раздел "Аssignment to undeclared variable"? Вывод можно сделать на основе рекомендаций, которые можно прочесть на сайтах разработчиков: Declaring Variables: Declaring JScript Variables and Constants: Кстати, прочтите о том, что на самом деле происходит, к примеру, в JScript в подобных случаях (должно помочь при оценке "валидности" подобных конструкций):
-
Где можно прочесть об этом алгоритме?
-
Вот это и есть ключевой момент. То, что происходит в случае "Если бы было var", всем хорошо понятно, и этому есть объяснение в спецификации. Но что происходит в случае, когда "не было var"? Есть ли в спецификации описание такого синтаксиса? А может быть это bug или extension ES3 синтаксиса? Попадет ли подобное в разряд семантических ошибок в будущих реализациях ES:
-
Можно определить стиль, используя селекторы атрибутов: input[type="submit"] { } А для IE использовать behavior.
-
Вам я ничего показывать не буду - в этом нет никакого смысла. Тем более, что Вы до сих пор не вникли в суть моего вопроса. Если Вас действительно интересуют отличия FunctionDeclaration от FunctionExpression, которые не имеют к данной теме никакого отношения, то можете самостоятельно прочесть разъяснения Zeroglif'а по этому поводу (учиться никогда не поздно). А смысла я не вижу (выше выделил специально), т.к. Вы не способны вести контруктивный разговор. Вы неоднократно доказали это раньше, показываете это и сейчас. При этом Вы еще настолько невнимательны, что остается только пожимать плечами: Вы действительно хорошо знакомы с "текущим контекстом", чтобы возражать WingedFox'у? // Получаем массив всех строк в нужной таблице tr = document.getElementsByTagName("tr"); ^^^^^^^^ ...
-
Заявления об "адекватной аргументации" от человека, который ведет беседу в таком ключе: это не более, чем вздор. Как всегда, Вы пытаетесь увести разговор в иное русло для того, чтобы скрыть отсутствие знаний. Это бесполезно, т.к. Вы уже показали то, насколько слабы ваши представления о предмете обсуждения. Более того, Вы продолжаете это демонстрировать, не понимая то, о чем идет речь. Повторю еще раз ? речь шла об определении и идентификации функций. В данном контексте все ваши блуждания по Ecma-262.pdf совершенно бесцельны. Нет и не будет в ECMAScript Language Specification такого понятия, как "декларация функций через присвоение"! Это плод вашего отвлеченного воображения. Хватит писать всякую чушь! Это не ошибка в порядке следования ? это полное отсутствие связи между вашим сознанием и тем, что и как происходит в ECMAScript Language. А Вы не то, чтобы невнимательно читаете, Вы даже не способны понять то, о чем идет разговор! Дело не в том, что возвращает свойство или метод, дело в алгоритме работы. Но это не удивительно ? Вам об алгоритмах выполнения кода ничего не известно. Поэтому Вы, как обычно, пытаетесь "увильнуть". Читайте, сколько угодно ? от этого не будет никакого толку, т.к. это чтиво не имеет к моему вопросу ни малейшего отношения. Как я уже писал ранее, беседа с вами ? это совершенно бесполезное занятие. Вы по-прежнему демонстрируете отсутствие понимания и навыков программирования на языке javascript. А поскольку я добился своей цели (см. выше), то я умываю руки.
-
В разделе 10.1.1 есть определение типов Function objects, в нем нет описания алгоритма создания и идентификации такой функции: zebra = function () {};. Вы или слепы, или глупы. Ссылки??? Что такое chain scope??? В ECMAScript Language Specification нет ни одного упоминания о таком определении. Вы совершенно не понимаете то, о чем пишите! Чем кардинально отличается HTMLCollection интерфейс от NodeList интерфейса? Вы "смотрите в книгу, а видите фигу"! Речь шла о разнице между rows property и методом getElementsByTagName! Я не собираюсь Вам ничего объяснять, т.к. мне хорошо известно, что это бесполезная трата времени! Что ж, я ставил цель ликвидировать неоднозначность в оценке фрагмента кода. Цель достигнута. Вы в очередной раз обнаружили полную несостоятельность в вопросах, касающихся javascript. Следовательно, любому понятно, что ваши замечания следует игнорировать целиком и полностью. Более того, при ближайшем изучении вашей писанины будет ясно, что она, кроме того, что бесполезна, еще и крайне вредна для тех, кто встал на тернистый путь изучения javascript. К счастью для них, Вы тут же показали, что в этой области Вы сами являетесь дилетантом!
-
1. Алгоритм создания и идентификации именованной функции описан в ECMAScript Language Specification. Не пытаясь описать своими словами вариант, который Вы считаете идентичным, просто укажите раздел спецификации, описывающий этот "нормальный" вариант. 2. Известно ли Вам мнение разработчиков JavaScript 2.0 насчет подобного синтаксиса, и будет ли подобный код поддерживаться на платформах будущего? Любой профессиональный программист знает о том, что переменные нужно определять явно. Прямо противоположное мнение может быть у тех, чей статус, в свою очередь, прямо противоположен "профессиональному". Любому программисту, работающему с DOM API, хорошо известна разница между rows property и методом getElementsByTagName. Утверждение, что разницы между ними не существует, - это первый признак отсутствия компетентности.
-
Небольшая корректировка: <form id='f'> <input type='text'> </form> <script type='text/javascript'> alert(document.getElementById('f')[0].tagName); // -> INPUT </script>
-
"Аж одну строку" плюс 3383 строки (jquery 1.2.2)! Кстати, если "присмотреться к нему" (к jquery), то можно увидеть такое (буду без устали цитировать David Mark'а , пока этот фрагмент не будет исправлен): // 1102 строка в jquery 1.2.2 if ( typeof array != "array" ) // тип "array" !!!!!!!!!!! for ( var i = 0, length = array.length; i < length; i++ ) ret.push( array[ i ] ); else ret = array.slice( 0 ); Эта грубейшая ошибка (и многое другое) обсуждалось вот в этой теме.
-
Тема натолкнула на мысль проверить новую (революционную) Opera 9.5b на предмет поддержки струкрурных селекторов. Сейчас, наконец-то, добрался до этой версии, и проверка принесла положительный результат. Opera 9.5b позволяет весь сценарий заменить одной строчкой: table.zebra tbody tr:nth-child(odd) { background:#ccc; } Очень мило, поскольку таким образом еще и динамически добавляемые ряды будут получать соответствующее оформление.
-
Кто Вам обещал, что они будут работать? Я предложил прочесть обсуждение (находящееся по ссылке) для того, чтобы Вы осознали, насколько тщетны попытки "исправить" поведение Opera.
-
Как заставить работать ondblclick для текста в Opera 9.21?
-
filter Attribute | filter Property: hasLayout Property:
-
Чтоб Вы знали - работать не будет.
-
Spavel_74 Проверяли?
-
Это понятно. Но Вы ведь писали, что: Из этого следует, что Вы сначала присваиваете какие-то значения, а затем тут же пытаетесь их получить. Что за "хитрый" алгоритм, в чем уловка? По делу могу предположить следующее (опять предположить, т.к. тест-кэйс так и не появился). В браузере IE события происходят в ином порядке, чем в Opera. А поскольку именно alert способен в IE нарушить очередность выполнения js-функций, то поэтому Вы получаете то, что без alert - "тишина", с alert - то, что нужно. Вывод - необходим тест для проверки хода выполнения вашего сценария.
-
Spavel_74, дело в том, что Вы сами, т.с. своими руками, "убиваете" интерес к вашей проблеме и желание помочь Вам ее разрешить каким-нибудь образом. Во-первых, взяв ради примера второй фрагмент вашего кода и обнаружив в нем строку, длиной в 204 символа, любой поймет, что тут необходимо редактирование. Этим заниматься мало кому захочется. Я вот еще год назад с удовольствием этим занимался, а теперь просто надоело (вот надоело и все, и ничего не могу с собой поделать ). Во-вторых, Вам необходимо сделать тестовый пример. Поскольку Вы свою задачу решаете довольно своеобразно, то в вашем коде не очень просто разобраться. Вот если будет готовый пример, то, возможно, будет легче найти то, с чем Вы собираетесь "бороться". По существу пока могу написать только следующее. Если Вы собираетесь "маникулировать с установленными свойствами priflabel и resourceobj от body", то почему бы Вам сразу не обратиться к нужным значениям? Ведь эти значения Вы сами же и устанавливаете в св-ва body.
-
А я нашел вот такие способы: Dynamic Gradient Background (with SVG) Dynamic Gradient Background (with ) А есть даже такой: gradient backgrounds without images
-
А у меня такое ощущение, что Вы - неисправимый попрошайка. Хотя, справедливости ради, нужно признать то, что попрошайка Вы довольно изобретательный. Вы всякий раз придумываете какой-нибудь новый способ выклянчить ответ на свой вопрос. Чтобы не быть голословным, приведу пару-тройку цитат: Подскажите кодом как дождатся загрузки... Люди ну помогите кто нибудь. Подскажите плиз что нетак, не 'жмотьте' знания. Теперь решили прибегнуть к иной тактике - попытаться задеть самолюбие тех, кто не отвечает на ваш "зов о помощи". Но неужели Вам не пришла в голову мысль, что Вам не отвечают лишь потому, что ваш вопрос просто неинтересен? Дело в том, что о проблемах подобного рода и способах их решения пишут в книгах "для самых маленьких", которые, как правило, в своих названиях имеют два, общих для всех этих книг, слова - "для чайников". Именно поэтому никто не хочет объяснять, фигурально выражаясь, как вскипятить воду в чайнике, или же, например (извините за очередную метафору), как нарезать хлеб при помощи ножа. Тем не менее, у Вас всегда есть шанс получить ответ, если вместо того, чтобы прибегать к своим примитивным уловкам, Вы воспользуетесь советами и рекомендациями, которые изложены в известном руководстве под названием Как правильно задавать вопросы. Этот документ может не только научить задавать вопросы, но и наверняка сумеет помочь изменить мировоззрение и расширить кругозор (а это, как известно, бывает только к лучшему).