Я предпочитаю var that = this. Всё-таки используется «тот» контекст, а не «этот». Да и self — предопределённая переменная в JS, которая впрочем, как правило, не используется.
Без замыкания можно обойтись только в том случае, если функция, принимающая callback, принимает и контекст для него. Иначе что self, что .bind, всё равно замыкание создаётся.
>> Использование for (var i in []) вызовет проблемы в ie даже не с раширенными прототипами
Вообще говоря цикл for-in для массивов может вызвать проблемы в любом браузере и без расширения прототипов. Простой пример
var a = 'ab'.match(/((a)(b))/); // метод match возвращает массив
var props = '';
for (var i in a) {
props += i + ' ';
}
alert(props);
// IE: input index lastIndex 0 1 2 3
// Остальные браузеры: 0 1 2 3 index input
Вы считаете дешёвым понтом слова о том, что на Javascript без затруднений поддерживаются крупные проекты, если выбрать нормальную архитектуру приложения? Ну ладно, считайте.
>> Всем, кто знаком с Javascript, знают как трудно поддерживать быстро растущий код с множеством магии вроде наследования, передачи контекста объекта в callback методы и многое, многое другое.
Только на одном из проектов поддерживаю ~2 MB JS-кода, поддерживать не трудно. Может язык стоит изучить, перед тем, как такое говорить?
В статье bitbybit.ru/tutorial/Javascript/lesson/147 местами написан бред. Я бы там оставил комментарий по OpenID, например, но обычную-то регистрацию лень проходить, а инвайт просить и подавно.
Вопрос: как вы считаете, когда с таким подходом к регистрации ваши пользователи узнают, что неправильно в статье?
У WebWorker много ограничений: он должен жить в отдельном файле, файл должен находиться на том же домене, worker не имеет доступа ни к DOM, ни к остальным скриптам, общение с внешним миром только с помощью XMLHttpRequest или postMessage.
Кстати в первом случае в IE ключа 2 существовать не будет :)
Если говорить формально
javascript.ru/ecma/part4#a-4.3.3
each работает по разному в разных браузерах.
map и filter используют each, поэтому тоже работают по разному, но даже если исправить each, map будет работать неправильно.
indexOf, lastIndexOf тоже работают неправильно.
Выведет 1 в IE, 2 в остальных браузерах. Хотя в IE в данном конкретном случае должен вывести -1, но это из другой оперы.
В разных браузерах будет разный результат.
Вообще говоря цикл for-in для массивов может вызвать проблемы в любом браузере и без расширения прототипов. Простой пример
var a = 'ab'.match(/((a)(b))/); // метод match возвращает массив
var props = '';
for (var i in a) {
props += i + ' ';
}
alert(props);
// IE: input index lastIndex 0 1 2 3
// Остальные браузеры: 0 1 2 3 index input
Только на одном из проектов поддерживаю ~2 MB JS-кода, поддерживать не трудно. Может язык стоит изучить, перед тем, как такое говорить?
Вопрос: как вы считаете, когда с таким подходом к регистрации ваши пользователи узнают, что неправильно в статье?
Нет, не условности. 12, «abc», true, false — это всё примитивные значения, а не объекты. При попытке вызвать у них метод, они приводятся к объекту.
dmitrysoshnikov.com/ecmascript/ru-chapter-8-evaluation-strategy/#realizatsiya-v-ecmascript
И не всё в JS объекты.
CSS:
a:visited { display: none; }
JS:
alert(a.offsetWidth? 'Не посещена': 'Посещена');
Поэтому и вырубают свойства, влияющие на layout.