Немного переделал так
var topmenu= (function(window) {
var elements = [];
var result={
functio: function () {
alert(arguments[0].innerHTML);
}
};
function f(callback) {
elements.forEach(callback);
return this;
}
for (var method in result)
result[method]=f.bind(result, result[method]);
result.Sattr=function(name)
{
try{ elements = Array.prototype.slice.apply(document.querySelectorAll(name));}catch(e){}
return this;
};
return result;
}(window));
topmenu.Sattr("div").functio().functio();
Сложнее всего до моего понимания доходит эта строка
for (var method in result) result[method]=f.bind(result, result[method]);
Насколько я понимаю,
1) мы передаем текущий объект в функцию f
2) в ней через foreach применяем к каждому отдельному элементу массива callback, которым является каждый метод текущего объекта т.е. result[method]
При этом мне вовсе не яcно, как функция вообще получает elements. Т.к. попытка вызвать его вне метода не дает результата.
Т.е. если перед циклом for поставить alert(elements.length); толку не будет.
Что как бы говорит о том, что все указанные действия вне методов вызываются либо сразу, либо при каждом обращении к объекту через его метод.
Кроме прочего насколько я понимаю bind - это своего рода внутренняя функция, которую можно повторить и в устаревших браузерах.
В общем, второй день сижу, пытаясь разобраться, что да как, запутался уже. Помогите, пожалуйста, разобраться, и заодно симулировать bind.