Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > concat для arguments ?


Автор: SunOK 24.11.2007, 14:10
Доброго время суток.
Задача: создать функцию AddEvent(obj,type,fn,val1,val2,...)
всё хорошо еслибы не arguments, который вродибы как и массив, но не имеет методов! 

смысл таков 
Код

function AddEvent(obj,type,fn){
    var _arg = Array.slice(arguments,3)    
    function f(){                
        fn.apply(fn,_arg)   // arguments + _arg   как ? 
    }
         .....

Автор: ksnk 24.11.2007, 14:41
К примеру - так:
Код

    function makeArray( a ) {
        if ( a instanceof Array)
            return a.slice( 0 );
        else {
            var r = [];
            for ( var i = 0, al = a.length; i < al; i++ )
                r.push( a[i] );
            return r;
        }
    }

function AddEvent(obj,type,fn){
    function f(){                
        fn.apply(fn,makeArray(arguments).slice(3))   // arguments + _arg   Вот так! 
    }
         .....


Автор: SunOK 25.11.2007, 14:53
спасибо ksnk меня почемуто  переклинело, что ф-я apply() вторым параметром принимает Object !

Автор: SunOK 30.11.2007, 13:16
У меня получилось все это склипать вот в  такой вид 
Код

function addEvent(obj, name, handler) {   
    var arr = (arguments.length>3)?(Array.prototype.slice.apply(arguments)).slice(3,arguments.length):[];
    function fn(e){    
        handler.apply(this,(new Array(e)).concat(arr));
    }
    if(obj.addEventListener)  return obj.addEventListener(name, handler, false);
    else if (obj.attachEvent) return obj.attachEvent('on'+name, handler);    
}

тутже появилась  проблема, как удалить этот ивэнт removeEvent ? 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)