Function.prototype的apply和call是在1999年發(fā)布的ECMA262 Edition3中才加入的(1998年發(fā)布ECMA262 Edition2)。在此前的的瀏覽器如IE5.01(JScript 5.0)中是沒有apply和call的。因此會(huì)帶來一些兼容性問題,以下是修復(fù)方式:
復(fù)制代碼 代碼如下:
if(!Function.prototype.apply){ 
    Function.prototype.apply = function(obj, args){ 
        obj = obj == undefined ? window : Object(obj);//obj可以是js基本類型 
        var i = 0, ary = [], str; 
        if(args){ 
            for( len=args.length; i<len; i++ ){ 
                ary[i] = "args[" + i + "]"; 
            } 
        } 
        obj._apply = this; 
        str = 'obj._apply(' + ary.join(',') + ')'; 
        try{ 
            return eval(str); 
        }catch(e){ 
        }finally{ 
            delete obj._apply; 
        }    
    }; 
} 
if(!Function.prototype.call){ 
    Function.prototype.call = function(obj){ 
        var i = 1, args = []; 
        for( len=arguments.length; i<len; i++ ){ 
            args[i-1] = arguments[i]; 
        } 
        return this.apply(obj, args); 
    }; 
} 
新聞熱點(diǎn)
疑難解答
圖片精選