1. 程式人生 > >學習JS權威指南記錄

學習JS權威指南記錄

針對IE bug做的補丁

var extend=(function(){

//處理IE bug 即如果o的屬性擁有一個不可列舉的同名屬性,那麼for/in迴圈不會列舉物件o可列舉的屬性

        for (var p in {toString:null}){
        
        
            return function extend(o){
            
                for (var i=0;i<arguments.length;i++){
                
                    var source=arguments[i];
                    for(var prop in source)o[prop]=source[prop];
                }
                return o;
            };
        }
        return function patched_extend(o){
            for (var i=0;i<arguments.length;i++){
                
                    var source=arguments[i];
                    for(var prop in source)o[prop]=source[prop];
                    for(var j=0;j<protoprops.length;j++){
                    
                        prop=protoprops[j];
                        if(source.hasOwnProperty(prop))o[prop]=source[prop];
                    }
                }
                
                
                
            return o;
        
        };
    
    var protoprops=["toString","valueOf","constructor","hasOwnProperty","isPrototypeOf","propertIsEnumerable","toLocalString"];//需要檢查的特殊屬性
    }());
    

    var _=0;

自定義函式的屬性

JS中函式不是原始值  而是一個特殊物件,也就是說函式可以擁有屬性

    function factorial(n){
        if(isFinite(n)&&n>0&&n==Math.round(n)){
            if(!(n in factorial))
                factorial[n]=n*factorial(n-1);
                return factorial[n];
            
        }
        
        factorial[1]=1;
    
    };

函式宣告 function XXX(/*引數*/) {     /*       函式體*/};  函式定義表示式  var XXXX = function(/*引數*/){/*函式體*/};

var a=[function(x){return x*x;},20];    //函式直接量

a[0](a[1]);  //=>400