Показать сообщение отдельно
  #36 (permalink)  
Старый 28.08.2012, 13:03
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Немного переделал так
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.
Ответить с цитированием