JavaScript: типы, классы и фреймы

С год назад мы тут разбирались с определением типов в JavaScript.

Рассмотрим ещё один аспект: фреймы. Из фрейма во фрейм можно передавать данные.

Например, у нас есть функция, которая обрабатывает массив немного по другому, чем объект:

function func(value) {
    if (value instanceof Array) {
        // массив
    } else {
        // объект
    }
}

И на странице есть iframe, в котором следующее:

window.parent.func([1, 2, 3]);

Это будет работать некорректно. Так как мы сравниваем значение с нашим Array из нашего основного окна. А значение создано во фрейме, в котором свой window и свой window.Array и именно от него производится этот массив.
Остальной текст под катом

Function Expression и ебучий осёл

В JavaScript, как известно, есть два способа объявить функцию.

/* Function Declaration. Функция сразу определяется в локальном контексте под именем func */
function func() {
 
}

и

/* Function Expression.  */
var func; // func просто переменная. Изначально в ней, как обычно, undefined.
 
func = (function () {}); // В определённый момент в качестве значения ей присваивается объект функции.

FE ещё называют анонимной функцией.

И есть ещё один подвид Function Expression. Именованное (Named) Function Expression:

var func;
 
func = (function fufunc() { /* ... */ });

Анонимная неанонимная функция :).

В нашем локальном контексте по прежнему есть переменная func.
Но в контексте вызываемой функции также появляется её «имя» fufunc.
Остальной текст под катом

Через Жо

Пару недель назад на Хабре перевели статью одного из разработчиков Internet Explorer о том, почему innerHTML не работает с таблицами. Объяснение, почему оно не работает чётко показывает подход использованный в разработки IE. Подход «пиздец, ну и похуй».

Как это было и в прошлый раз с утечками памяти при работе с DOM, и на этот раз, вместо того, чтобы исправлять свой продукт, творцы из MS пишут статьи о том, каким путём проблему можно обойти. Путь, как и обычно, пролегает через жопу и кишечник.

Радуют объяснения из серии: «я мог проверить, что innerHTML у TBODY устанавливался во что-то, начинающееся с <tr>… Звучит достаточно просто, пока вы не начнёте учитывать все варианты. Вроде подающейся строки, например как <!— новые строки —><tr>…». То есть вместо того, чтобы забить на этот гипотетический вариант с комментарием, IE достигает универсальности одинаковой работы для всех вариантов. Универсальности из серии не работает ваще нигде.