您的位置:首页 > Web前端 > JavaScript

学习JS权威指南记录

2015-08-05 20:44 609 查看
针对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*factorial(n-1);

                return factorial
;

            

        }

        

        factorial[1]=1;

    

    };

函数声明 function XXX(/*参数*/) {     /*       函数体*/};  函数定义表达式  var XXXX = function(/*参数*/){/*函数体*/};

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

a[0](a[1]);  //=>400
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: