Статья о JavaScript
Помогите с вычиткой статьи Википедии о JavaScript (http://ru.wikipedia.org/wiki/JavaScript)?
О чём ещё написать? Что переработать? |
Цитата:
Цитата:
Объявление переменных Цитата:
Более того, в контексте eval-а, var-ы, всё-таки, могут быть удалены, поскольку, в этом контексте им не выставляется {DontDelete}. Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Про DOM почитал поверхностно. Цитата:
|
Это надо подробно посмотреть, статья большая. Я потихоньку буду вычитывать и сюда писать. Мож кто ещё поможет. Неточности есть само собой.
|
Цитата:
|
Dmitry A. Soshnikov: потрясающе. Спасибо большое. Привожу в соответствие с Вашими замечаниями. Начал с объявлений переменных: там смысл сильно меняется. Ни в одной книге из просмотренных не нашёл то, о чём Вы пишите в Тонкостях ECMA-262-3. Часть 2. Объект переменных. Однако со спецификацией и здравым смыслом материал статьи очень хорошо согласуется.
Zeroglif: Спасибо Octane: Мм. Смысл фразы в том, что Number в JavaScript — это практически то же самое, что определяется стандартом IEEE 754-2008 за исключением небольшого отличия в отношении NaN. И в отношении специального значения Infinity всё в полном соответствии с IEEE 754-2008.. |
Plest, рад помочь.
По поводу ООП, в разделе литературы, вы в первую очередь приводите и рекомендуете книги Дж.Резига; однако, некоторая его информация также местами является весьма поверхностной (а иногда, и отсебятиной), слабо стыкующейся с ES. Объективно, наиболее полной и точной информацией по ООП в JS на сегодня в .ru-нете (и не только в ru-нете, по мнению некоторых англоговорящих коллег) является эта статья, она будет переведена в первую очередь. Для тех, кто интересуется ES глубоко, можете сослаться на мой блог; я думаю, им будет, что почерпнуть из него. |
Добавил, но из списка книг оно выбивается. По-моему, лучше на конкретные записи в подходящих местах ссылки поставить. Вы много уникального и полезного материала написали.
У Резига есть ошибки, конечно. Но, по-моему, из печатного на русском лучше его книги, а также «Подробных руководств» Флэнагана и Макфарланда, книг по JavaScript сейчас просто нет. Здесь хвалят книгу Гудмана. По-моему, из её тысячи страниц полезная информация есть страниц пятьдесят. По поводу механики ООП в JavaScript IMHO книге Стояна Стефанова нет равных. |
Цитата:
Как вариант, можно ниже где-нибудь в ссылках оставить, а не в списке литературы. Только тогда, получается, не в разделе " Блоги известных авторов книг ", поскольку я, всё-таки, книг (пока) не написал и не знаю, есть ли большой смысл. Книга Флэнагана, действительно, очень неплохая (кто-то называет её "лучшей книгой по JS", кто-то "наименее плохой" - два высказывания, объективно, верные). Он использует собственную терминологию, местами что-то перевирает, но это можно оправдать - за некоторыми упрощениями кроется благородное желание рассказать это очень понятно, хоть и местами поверхностно и в альтернативных (выдуманных) названиях. Цитата:
Цитата:
Цитата:
Также, цепь прототипов заканчивается не на Object, как пишется (и даже не на Object.prototype), а на Object.prototype.[[Prototype]], который и будет равен null. Возможно, есть ещё недочёты - я только бегло просмотрел главы об объектах и прототипах. Вот именно в этом статичная книга и отличается от блога - в ней уже не исправить подобных грубых ошибок. В блоге же всегда можно посоветоваться с коллегами и решить, как лучше написать/подать тот или иной материал. Цитата:
|
Быстро по истории:
Цитата:
Цитата:
Цитата:
|
Что книжка стоянова, что книжка ресига - полное г. хотя бы с (полу)академической точки зрения. Назовите мне 10 страниц наугад и мы проверим качество. Неужели нельзя обойтись без того, чтобы тащить это в википедию. Обидно за предмет. ;-)
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Всё. Дочитал. Хорошая статья - обзорная, сухо и достаточно точно написанная. Спасибо за труд. |
http://www.davidflanagan.com/ - сайт/блог автора единственной вменяемой книги по js.
|
Zeroglif, :blink:
Цитата:
|
Да в наше время и без книжек можно прожить. ;-)
|
Dmitry A. Soshnikov,
Спасибо. По Вашим замечаниям мне осталось поправить части статьи о следующих вещах: функциональный аргумент, constructor, конструктор. Zeroglif, Спасибо. По Вашим замечаниям мне осталось поправить следующие вещи: - раздел по истории языка (в книгах не нашёл подробного освещения, однако нашёл пресс-релизы, которые Вы упоминаете), - области видимости, - constructor. === в сниппетах кода хочу оставить по похожим причинам, что и необязательные точки с запятой: оно, скорее, добро чем зло: взять те же рекомендации Крокфорда. Исправлю. Стараюсь делать к правкам внятные комментарии, чтобы можно было легче ориентироваться в истории изменений. Если что-то ещё бросится в глаза, дайте знать, пожалуйста. Хотел спросить вашего мнения вот по какому вопросу. В русскоязычной Википедии есть довольно бледно выглядящая статья ECMAScript. Есть смысл перенести туда раздел Ядро из статьи JavaScript, оставив первый абзац и ссылку? Смущает вот что: - в литературе, в основном, фигурирует JavaScript, когда речь, на самом деле идёт об ECMAScript и это может внести путаницу у читателей; - синтаксис языка — довольно важная его часть. Есть ли смысл заставлять читателя делать лишний клик. Может быть, имеет смысл перенести не всё, а какую-то часть? Или что-то продублировать? Мне подходящего варианта в голову не приходит, рецензенты по этому поводу тоже пока молчат. В англоязычной Википедии поступили следующим образом: выделили синтаксис языка в отдельную статью, а затем пришли к выводу, что текст неэнциклопедичен и должен быть перенесён в Wikibooks. |
Цитата:
Цитата:
Richard Cornford: It has long since been widely agreed that 'javascript' is an appropriate term to use when talking of all ECMAScript implementations, so JavaScript(tm) and JScript (and KScript, DScript or whatever) can be used to talk about specific implementations. The usage of 'javascript' is now common and well understood. http://groups.google.com/group/comp....6b9c3bfa268d43 Michael Winter: JavaScript (capital J, capital S) refers to a specific ECMAScript implementation. Javascript (capital J, or all lower case) is conventionally used, at least in c.l.javascript, to refer to ECMAScript implementations in general. http://groups.google.com/group/alt.h...87d7bba18eb59e Jim Ley: Javascript without the capital S is also commonly used to refer to all ECMAScript languages, having JavaScript reserved for Netscapes implementation. So you say javascript, but that's just a name in the registry which is aliased to JScript. http://groups.google.com/group/comp....f3722f49894f03 John G Harris: Actually both JavaScript and JScript are registered trade marks. You are not allowed to use either word to cover both language variants. That's why "javascript" is a reasonable word to use when you are not talking about a particular release of a particular company's product. http://groups.google.com/group/comp....154ce65d596fae John G Harris: ECMAScript (capital S says ECMA) is only the core language. It doesn't include i/o facilities such as Alert and file access. The advantage of "javascript" is that the lack of capital letters suggests that it's not restricted to the products of one company or organisation. http://groups.google.co.uk/group/com...0e481801dab3b6 Ядро должно быть перенесено в отдельную статью просто по той причине, что иначе блок про ядро нужно дублировать в статье про тот же JScript(тм), язык совершенно независимый от JavaScript(тм), имеющий собственное название и кучу собственных фич. Не менее достойный претендент на полное описание. Что касается неэнциклопедичности - ничего не могу чказать, я не знаю этих ваших принципов. ;-) |
И ещё. Скриптовые языки отдельных производителей не равны EcmaScript, о чём вы правильно упоминаете в разделе про структуру. JavaScript, а потом и JScript были предтечей, базой для выработки и написания стандарта. Оформившись в независимую сущность, стандарт стал требовать своего соблюдения. В этом смысле скриптовый язык - это не реализация EcmaScript только лишь, а язык (JavaScript, JScript), в котором реализованы синтаксис, семантика, принципы и алгоритмы другого языка (ES). Если это реализовано правильно, то скриптовый язык получает медаль: "Conforming implementation of ECMAScript".
В общем, я голосую за выделение ядра в отдельную статью. И за ремарку в статье про JavaScript о смешении терминологии. Удачи вам. |
Цитата:
Функции же, возвращающие другие функции, называются функции с функциональным значением. Я затрагивал эти определения в статье о замыканиях в ES. Функциональный аргумент (сокращённо, "Фурарг", "Funarg") - это одна из "проблем" стековой организации локальных переменных. Решением этой проблемы и являются замыкания, которые запоминают весь лексический контекст ещё на этапе создания. Соответственно, локальные переменные хранятся уже не в стеке, а в "куче" (heap). C другой стороны, коллбэк (callback) - тоже подходит под определение и не завязан на чисто функциональные языки. Например, в Си, это просто указательно на функцию, и, если область определения этой функции уже удалена, то коллбэк не отработает. Поскольку в ES все функции являются замыканиями, то теоретически, термин функциональный аргумент подошёл бы больше. Хотя, и коллбэк - тоже вписывается. Двояко, на самом деле. Возможно даже, функциональный аргумент - это частный случай коллбэка, а не наоборот, как я отмечал выше, но я, опять же, имел в виду относительно ES. Поэтому можно оставить и коллбэк, сильной принципиальной разницы нет. К тому же, коллбэк, действительно, более привычное и распространённое понимание передачи кода параметров в функцию. Цитата:
За исключением того, что порождённые от функции-конструктора объекты, будут находить это свойство в своём прототипе (ведь оно было добавлено в Функция.prototype при создании Функции), ничего примечательного больше с этим свойством не связано. Его можно свободно удалить или изменить. Т.е. основной момент, что свойство constructor - это свойство прототипа объекта, но не родное свойство. Соответственно, утверждение, что все объекты при порождение получают свойство constructor - неверное. Ни один из объектов не получает свойство constructor при порождении (кроме как объекта, являющегося свойством prototype фунцкии), но объекты наследуют это свойство из своего прототипа, поскольку прототип объектов - [[Prototype]] был установлен из свойства функции prototype (или же из Object.prototype, если на момент порождения Функция.prototype не являлся объектом). Цитата:
Если разобрать глубже, то код самой функции является инициализирующим, поскольку за создание объекта отвечает на сама функция, а её внутреннее свойство [[Construct]]. [[Construct]] - это общий конструктор для всех объектов. Когда создаются функции, все они получают внутреннее свойство [[Construct]]. Оператор new, соответственно, вызывает метод [[Construct]], который и создаёт объект. И уже затем, сам [[Construct]], вызывает функцию в контексте вновь созданного объекта, т.е. делает что вроде: Функция.apply(созданныйОбъек� �, arguments);. Более подробно о конструкторе - в седьмой части. Там же - алгоритм создания объектов. Также, можно посмотреть алгоритм создания функций (из пятой части), чтобы точно понять, что из себя представляют функции. Для Википедии, поскольку там должно быть описание не чисто теоретико-сухое и не чересчур углублённое, а - для точного, но основного понимания, может быть следующим: Конструктор в ES- это (любая) функция, являющаяся шаблоном для порождаемых объектов. Применённая к оператору new, она создаёт объект и инициализирует его, будучи вызванной в контексте созданного объекта. За непосредственное выделение памяти и создание объекта, отвечает её внутренний метод [[Construct]], который является стандартным конструктором для всех объектов и записывается в каждую функцию при её создании. Не обязательно в таком виде, но с этой сутью. Хотя, можно и срезать дебри про [[Construct]] и вынести чуть ниже. Т.е. сделать основное описание, что - это функция, создающая и инициализирующая объект посредством this (у вас сейчас примерно так и написано). И написать, что подробное определение смотрите чуть ниже (кому интересно). |
Часовой пояс GMT +3, время: 10:55. |