Вот-вот, «не в ущерб». Похожая ситуация: из IPv6 убрали контрольную сумму за ненадобностью. IP, более низкий уровень, уже считает контрольную сумму пакета, и незачем считать её дважды. Так и тут, зачем принуждать пользователей использовать SSL, если эта задача уже решена на более низком уровне?
И вообще, HTTP — протокол 7 уровня OSI, а SSL — 6-го (если я ничего не путаю). За каким чёртом HTTP должен знать, о том, какой более низкий слой его обеспечивает? Это что, чтобы сделать GET / HTTP/2.0 на localhost, мне нужно будет SSL поднимать?
Безусловно, IP используется не только для HTTP, но ведь и использовать IPSec для всех-вообще соединений никто не требует.
Ближайшее будущее, повсеместно наступил IPv6. Любое оборудование, поддерживающее IPv6, должно (ранее «MUST», сейчас «SHOULD») поддерживать IPSec для шифрования на сетевом уровне.
Поверх этого работает HTTP/2.0, и у него обязательно включен SSL, который используется для шифрования на уровне представления.
Вопрос: зачем столько шифрования, и когда вебостроители будущего договорятся, наконец, друг с другом?
Необязательные аргументы в середине списка всё-таки не самая удобная вещь. Как по мне, гораздо удобнее передавать опциональные параметры в виде хеша (объекта):
Foo.prototype.useWithBar(barInstance, options) {
if (options) {
var baz = options.baz;
var quux = options.quux;
}
/* ... */
}
Я ни в коем случае не говорю, что Ваш код или подход плохой или неправильный, просто как вариант:
Можно это дело оформить как graceful degradation:
var protohack = (function() {
function Clone(properties) {
for (var propName in properties){
this[propName] = properties[propName];
}
}
if ({__proto__: Clone.prototype} instanceof Clone) {
return new Function('o', 'return o;'); // No-op, от глобального скопа
}
return function(o) {
if (!o || !o.__proto__ || typeof o.__proto__ !== 'object') {
return o; // В объекте не перекрывается __proto__, или это вообще не объект. Возвращаем обратно как есть
}
Clone.prototype = o.__proto__;
delete o.__proto__;
return new Clone(o); // Возвращаем новый объект с нужным [[prototype]]
}
})();
Тогда вызов
var donald = protohack({name: "Donald", __proto__: talkingDuck$});
Может, окажется полезным. В SVG есть vector-effect="non-scaling-stroke", если он выставлен, то толщина stroke (и stroke-dasharray) не зависит от масштаба.
Кстати, отличная идея, 1ney! В PNG разделение цвета и альфы на разные изображения действительно может дать свои плюсы. PNG вообще по этому поводу часто критикуют.
Демо
86 128 б
71 919 б
6 764 б
Все изображения оптимизированы с одинаковыми настройками. Автор: Mythique-Design.
Ага. Я верю, наступит тот день, когда векторные картинки будут делать через svg, колонки при помощи grid layout, а выравнивание — флексбоксом. Ну а пока будущее не наступило… эх!
Цвет в заинлайненных svg меняется очень легко, css-свойством fill. Тень делается через filter effects.
Более того, некоторые элементы можно выносить в <defs> (что-то вроде библиотеки в флеше), а потом фигуру любой сложности использовать при помощи <use> в нужном месте с перекрытыми по необходимости атрибутами и css.
Единственная, но очень важная, проблема — эту «библиотеку» можно только инлайнить в каждую страницу, т.е., подключить её не получится. Впрочем, <iframe seamless> теоретически может помочь, но даже если и так, это костыль, а не решение.
Вкратце: имхо, SVG — очень клёвая идея с недостаточно продуманной имплементацией.
JavaScript и JScript как-то не очень честно на два языка разделять. Тем более, что на странице JScript в википедии, куда ведет ссылка, приведена цитата Крокфорда:
They are just different names for the same language, and the reason the names are different was to get around trademark issues.
Ник подошёл, и она познакомила нас. «Мэрилин говорит, что ты — профессиональный игрок».
— Правильно.
— Мне бы очень хотелось знать, как можно зарабатывать на жизнь азартными играми, ведь за столом шансы равны 0,493.
— Ты совершенно прав, — сказал он, — я объясню, как. Я не ставлю деньги на стол и не делаю ничего подобного. Я делаю ставку только тогда, когда шансы в мою пользу.
— Хм! А когда шансы вообще бывают в твою пользу? — скептически спросил я.
— На самом деле это довольно просто, — сказал он. — Я стою у стола, когда какой нибудь парень говорит: «Сейчас выпадет девятка! Сейчас просто обязана выпасть девятка!» Парень возбуждён; он думает, что выпадет девятка и хочет заключить пари. Я хорошо знаю все шансы выпадения всех чисел, поэтому я говорю ему: «Ставлю четыре к трём, что выпадет не девятка», — и, в конце концов, выигрываю. Я не ставлю деньги на стол; вместо этого я заключаю пари с теми, кто стоит у стола и верит в предрассудки — в счастливые числа.
Уточнения хорошие. Да, согласен, разница между scope chain и proto chain есть. Но не такая уж она прям и принципиальная.
А насчет [[global]] — незачем новичков пугать лишний раз. Я надеюсь, что разработчики расширений для браузеров или скриптов на node уже знают js достаточно хорошо, и им мой коммент вообще без надобности.
Главное, имхо, уточнениями не запутать все окончательно, а то ещё выйдет, что и «операция присваивания значения свойству никогда не изменит значение свойства, найденного в прототипе» — не совем-то и правда.
Аналогично. Когда я узнал, что scope — это всего-навсего объект, а переменные «внутри» него — это его свойства, оказалось, что в прототипах и в скопах используется по сути один и тот же механизм, делегация.
А «магическая» конструкция with() всего-то навсего добавляет в эту цепь произвольный объект. И тогда js стал для меня из непредсказуемой штуки красивым и изящным языком.
Файрфокс я пропустил, виноват, там такого ограничения действительно нет. Может быть, пока что нет, а может быть, и не собираются делать. Ну, и есть, разумеется, браузеры, навроде IE6, которые старше, чем WHATWG, и ни про какие 4 мс не слышали.
У Ильи Кантора есть страничка, где это поведение разбирается гораздо подробнее и в тестах.
В любом случае общее предупреждение «осторожно, оно может длиться намного дольше, чем ожидалось» остается в силе.
И вообще, HTTP — протокол 7 уровня OSI, а SSL — 6-го (если я ничего не путаю). За каким чёртом HTTP должен знать, о том, какой более низкий слой его обеспечивает? Это что, чтобы сделать
GET / HTTP/2.0
на localhost, мне нужно будет SSL поднимать?Безусловно, IP используется не только для HTTP, но ведь и использовать IPSec для всех-вообще соединений никто не требует.
Поверх этого работает HTTP/2.0, и у него обязательно включен SSL, который используется для шифрования на уровне представления.
Вопрос: зачем столько шифрования, и когда вебостроители будущего договорятся, наконец, друг с другом?
Достаточно наглядно и не нужно помнить, что четвертый аргумент можно передать третьим, но при этом нужно в качестве второго указать второй, третий, либо null.
(см. также thecodelesscode.com/case/104)
Опять же, в ES Harmony это будет выглядеть намного опрятней:
Можно это дело оформить как graceful degradation:
Тогда вызов вернет одно и тоже и в ES5 и в дремучем ES3.
vector-effect="non-scaling-stroke"
, если он выставлен, то толщина stroke (и stroke-dasharray) не зависит от масштаба.Демо: www.w3.org/TR/SVGTiny12/examples/non-scaling-stroke.svg
Кстати, отличная идея, 1ney! В PNG разделение цвета и альфы на разные изображения действительно может дать свои плюсы. PNG вообще по этому поводу часто критикуют.
86 128 б
71 919 б
6 764 б
Все изображения оптимизированы с одинаковыми настройками. Автор: Mythique-Design.
Более того, некоторые элементы можно выносить в
<defs>
(что-то вроде библиотеки в флеше), а потом фигуру любой сложности использовать при помощи<use>
в нужном месте с перекрытыми по необходимости атрибутами и css.Единственная, но очень важная, проблема — эту «библиотеку» можно только инлайнить в каждую страницу, т.е., подключить её не получится. Впрочем,
<iframe seamless>
теоретически может помочь, но даже если и так, это костыль, а не решение.Вкратце: имхо, SVG — очень клёвая идея с недостаточно продуманной имплементацией.
А насчет [[global]] — незачем новичков пугать лишний раз. Я надеюсь, что разработчики расширений для браузеров или скриптов на node уже знают js достаточно хорошо, и им мой коммент вообще без надобности.
Главное, имхо, уточнениями не запутать все окончательно, а то ещё выйдет, что и «операция присваивания значения свойству никогда не изменит значение свойства, найденного в прототипе» — не совем-то и правда.
object → [[proto]] → [[proto]] → [[proto]] → null
[[scope]] → [[scope]] → [[scope]] → window → null
А «магическая» конструкция
with()
всего-то навсего добавляет в эту цепь произвольный объект. И тогда js стал для меня из непредсказуемой штуки красивым и изящным языком.У Ильи Кантора есть страничка, где это поведение разбирается гораздо подробнее и в тестах.
В любом случае общее предупреждение «осторожно, оно может длиться намного дольше, чем ожидалось» остается в силе.