Вот что я прочитал в спецификации ECMA 5:
If this is evaluated within strict mode code, then the this value is not coerced to an object. A this value of null or undefined is not converted to the global object and primitive values are not converted to wrapper objects. The this value passed via a function call (including calls made using Function.prototype.apply and Function.prototype.call) do not coerce the passed this value to an object.
Я понимаю это как «Значение this в строгом режиме не приводится к объекту. Если this имеет значение null или undefined, this не будет приведено к глобальному объекту. Если значение this базового типа, оно не будет преобразовано в соответствующий объект. Значение this, переданное через вызов функции (в том числе, вызовы через Function.prototype.apply и Function.prototype.call), не будет преобразовано в объект.» В стандарте нет ограничений по способу вызова.
Однако в Chromium 11.0.696.65 все так, как Вы и описываете. В Firefox 4.0.1 в строгом режиме прямой вызов печатает в консоль undefined, вызов через Function.prototype.call — null. Я опирался на стандарт, но любой стандарт разбивается о практику :(
Полностью согласен. Сложность (и сила) JS в том, что у него своя, особенная парадигма. Главная задача при овладении JS — перестроить мозг с класс-ориентированного программирования на прототип-ориентированное и функциональное.
P.S. Под «достаточно легко освоить» подразумевал «прикрутить JQuery и радоваться новым свистелкам и перделкам на своем сайте»
Мне она просто попалась в руки в нужный момент. Всегда сложно совершить прыжок от новичка к продвинутому пользователю. К тому моменту я знал синтаксис JS (невеликий подвиг), но многое было непонятно — что это за зверь prototype, что делать без наследования, статических функций и т.д. Так что эта книжка — как первая любовь, на всю жизнь.
Гипергипертекстовый интернет? Звучит вкусно. Но слишком утопично. Вы забываете про одно очень важное преимущество обычного текста — он линеен. И мыслим мы с вами линейно. Описанная Вами система линейностью не обладает, а значит, не будет восприниматься сознанием. Разумеется, средства поиска по такой сети можно наделить функционалом выдачи линейного результата, но с какими затратами?
Поясню на примере. Допустим, я возжелал найти рецепт борща. Я открываю поваренную книгу и вижу: Достать кастрюлю, помыть свеклу. Как будет выглядеть подобный рецепт в предложенной Вами концепции?
If
this
is evaluated within strict mode code, then thethis
value is not coerced to an object. Athis
value ofnull
orundefined
is not converted to the global object and primitive values are not converted to wrapper objects. Thethis
value passed via a function call (including calls made usingFunction.prototype.apply
andFunction.prototype.call
) do not coerce the passed this value to an object.Я понимаю это как «Значение
this
в строгом режиме не приводится к объекту. Еслиthis
имеет значениеnull
илиundefined
,this
не будет приведено к глобальному объекту. Если значениеthis
базового типа, оно не будет преобразовано в соответствующий объект. Значениеthis
, переданное через вызов функции (в том числе, вызовы черезFunction.prototype.apply
иFunction.prototype.call
), не будет преобразовано в объект.» В стандарте нет ограничений по способу вызова.Однако в Chromium 11.0.696.65 все так, как Вы и описываете. В Firefox 4.0.1 в строгом режиме прямой вызов печатает в консоль
undefined
, вызов черезFunction.prototype.call
—null
. Я опирался на стандарт, но любой стандарт разбивается о практику :(P.S. Под «достаточно легко освоить» подразумевал «прикрутить JQuery и радоваться новым свистелкам и перделкам на своем сайте»
Поясню на примере. Допустим, я возжелал найти рецепт борща. Я открываю поваренную книгу и вижу: Достать кастрюлю, помыть свеклу. Как будет выглядеть подобный рецепт в предложенной Вами концепции?