Показать сообщение отдельно
  #2 (permalink)  
Старый 04.06.2012, 15:17
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Вариант без повтора "return this"
function $(a) { this[a] = a; }

// методы хранятся тут
var props = {
    "foo": function(){ alert("foo"); },
    // что-то возвращает
    "bar": function(){ alert("bar"); return ":)"; },
    "etc": function(a){ alert("etc"); return this[a]; }
};

// магическая оборачивалка
var i, wrap = function(prop) {
    return function(){
        var res = props[prop].apply(this, arguments);
        return res === undefined ? this:res;
    };
};

// обрабатываем свойства магической оборачивалкой
for(i in props) if(props.hasOwnProperty(i)) {
    $.prototype[i] = wrap(i);
}

// и используем.
alert( new $().foo().bar() );
alert( new $("HEYA!").etc("HEYA!") );

Последний раз редактировалось melky, 04.06.2012 в 15:20.
Ответить с цитированием