zoukankan      html  css  js  c++  java
  • js函数技巧

      1 <!DOCTYPE html>
      2 <html>
      3     <head>
      4         <meta charset="UTF-8">
      5         <title></title>
      6     </head>
      7     <body>
      8         <script>
      9         // 通过判断参数个数,模拟函数重载
     10            function add(){
     11              if(arguments.length ==1){
     12                 return arguments[0]+5;
     13              }else if(arguments.length == 2){
     14                 return arguments[0] + arguments[1];
     15              }
     16            }
     17         console.log(add(5))
     18         console.log(add(15,45));
     19 
     20         //Function对象 
     21         var doadd = new Function('arg1',"arg2","return (arg1+arg2)");
     22         console.log(doadd(3,5));
     23 
     24         //Function对象的属性:length和方法valueof(),toString();这两个方法返回函数的源代码,length返回,要求的参数个数;
     25 
     26         function add(num1,num2){
     27             return num1 + num2;
     28         }
     29         console.log(add.length);
     30         console.log(add.valueOf());
     31         console.log(add.toString());
     32 
     33         //函数是对象,函数可以有自己的属性和方法
     34         function fun(num){
     35             console.log('111');
     36         }
     37         fun.hi= function(){
     38             console.log("hi,haha");
     39         }
     40         fun();
     41         fun.hi();
     42 
     43         //工厂函数
     44           function createCar(color,size,logo){
     45             var obj = new Object;
     46             obj.color =color;
     47             obj.logo = logo;
     48             obj.size = size;
     49             return obj;
     50           }
     51           var car1 = createCar("red","4","benchi");
     52           console.log(car1);
     53 
     54           var car2 = createCar("blue","3","bwm");
     55           console.log(car2);
     56 
     57         //  构造函数
     58         function Car(size,color,logo){
     59             this.color = color;
     60             this.logo = logo;
     61             this.size = size;
     62         }
     63         var car3 = new Car("5","green","dazhong");
     64         console.log(car3);
     65 
     66         var car4 = new Car("6","black","jiefang");
     67         console.log(car4);
     68 
     69         //原型方式      
     70         function Car(){
     71             Car.prototype.color = "red";
     72             Car.prototype.size = "7";
     73             Car.prototype.logo = "dongfanghong";
     74 
     75         }
     76         var car5 = new Car();
     77         console.log(car5);
     78         var car6 = new Car();
     79         console.log(car6);
     80 
     81         //混合构造、原型方法
     82         function Cat(age,color){
     83             this.age = age;
     84             this.color = color;
     85         }
     86         Cat.prototype.eat = function(){
     87             console.log("吃五个老鼠!");
     88         }
     89         var cat1 = new Cat("3","white");
     90         console.log(cat1);
     91          var cat2 = new Cat("4","black");
     92         console.log(cat2);
     93 
     94         //动态原型方法
     95         function Cat(age,color){
     96             this.age = age;
     97             this.color = color;
     98             if(typeof Car._initialized == "undefined"){
     99                 Car.prototype.eat = function(){
    100                     console.log("吃五个老鼠!")
    101                 }
    102                 Car._initialized == true;
    103             }
    104         }
    105 
    106         //对象连接字符串
    107         function StringBuffer(){
    108             this._strings_ = new Array();
    109         }
    110         StringBuffer.prototype.append = function(str){
    111             this._strings_.push(str);
    112         }
    113         StringBuffer.prototype.toString = function(str){
    114             return this._strings_.join("");
    115         }
    116 
    117         var buffer = new StringBuffer();
    118         buffer.append("hello");
    119         buffer.append("world");
    120         buffer.append("  nihao");
    121         console.log(buffer.toString());
    122 
    123         //修改对象
    124 
    125         //通过已有的方法创建新方法
    126         Number.prototype.toHexString = function(){
    127             return this.toString(16);
    128         }
    129         var b = 15;
    130         console.log(b.toHexString());
    131 
    132         //重命名已有方法
    133         Array.prototype.enqueue = function(item){
    134             this.push(item);
    135         }
    136         Array.prototype.dequeue = function(){
    137             this.shift();
    138         }
    139         var arr = ["1","a"];
    140         arr.enqueue("b");
    141         console.log(arr);
    142         arr.dequeue("1");
    143         console.log(arr);
    144 
    145         //添加新方法
    146         Array.prototype.indexOf = function(item){
    147             for(var i=0;i<this.length;i++){
    148                 if(this[i] == item){
    149                   return i; 
    150                 }               
    151             }
    152             return -1;
    153         }
    154        console.log(arr.indexOf("b"));
    155 
    156        //为本地对象添加新方法
    157        //如果想给 ECMAScript 中每个本地对象添加新方法,必须在 Object 对象的 prototype 属性上定义它。
    158        Object.prototype.showValue = function(){
    159         console.log(this.valueOf());
    160        }
    161        var str = "hello";
    162        str.showValue();
    163 
    164     //重定义已有的方法
    165 //     Function.prototype.toString = function(){
    166 //      return "function code hidden!";
    167 //     }
    168 //      function sayHi(){
    169 //          console.log("hi");
    170 //      }
    171 //      console.log(sayHi.toString());
    172 
    173     //覆盖原始方法前,比较安全的做法是存储它的指针,以便以后的使用。有时你甚至可能在新方法中调用原始方法
    174        Function.prototype.originToString = Function.prototype.toString;
    175        Function.prototype.toString = function(){
    176         if(this.originToString().length>20){
    177             return "Function too long to display!"
    178         }else{
    179             return this.originToString();
    180         }
    181        }
    182        function sayHi(){
    183             console.log("hi");
    184         }
    185        console.log(sayHi.toString());
    186 
    187     //极晚绑定,先实例化对象,再定义方法,也能把方法给到之前创建的实例, 不建议这么用
    188        var o = new Object();
    189        Object.prototype.sayHi = function(){
    190         console.log("hi");
    191        }
    192        o.sayHi();      
    193 
    194     /*所谓绑定(binding),即把对象的接口与对象实例结合在一起的方法。
    195        早绑定(early binding)是指在实例化对象之前定义它的属性和方法,这样编译器或解释程序就能够提前转换机器代码。
    196           在 Java 和 Visual Basic 这样的语言中,有了早绑定,就可以在开发环境中使用 IntelliSense(即给开发者提供对象中属性和方法列表的功能)。
    197        ECMAScript 不是强类型语言,所以不支持早绑定。
    198        另一方面,晚绑定(late binding)指的是编译器或解释程序在运行前,不知道对象的类型。
    199        使用晚绑定,无需检查对象的类型,只需检查对象是否支持属性和方法即可。ECMAScript 中的所有变量都采用晚绑定方法。这样就允许执行大量的对象操作,而无任何惩罚。*/
    200         </script>
    201     </body>
    202 </html>

    <!DOCTYPE html><html>    <head>        <meta charset="UTF-8">        <title></title>    </head>    <body>        <script>        // 通过判断参数个数,模拟函数重载           function add(){             if(arguments.length ==1){                return arguments[0]+5;             }else if(arguments.length == 2){                return arguments[0] + arguments[1];             }           }        console.log(add(5))        console.log(add(15,45));
            //Function对象         var doadd = new Function('arg1',"arg2","return (arg1+arg2)");        console.log(doadd(3,5));
            //Function对象的属性:length和方法valueof(),toString();这两个方法返回函数的源代码,length返回,要求的参数个数;
            function add(num1,num2){            return num1 + num2;        }        console.log(add.length);        console.log(add.valueOf());        console.log(add.toString());
            //函数是对象,函数可以有自己的属性和方法        function fun(num){            console.log('111');        }        fun.hi= function(){            console.log("hi,haha");        }        fun();        fun.hi();
            //工厂函数          function createCar(color,size,logo){            var obj = new Object;            obj.color =color;            obj.logo = logo;            obj.size = size;            return obj;          }          var car1 = createCar("red","4","benchi");          console.log(car1);
              var car2 = createCar("blue","3","bwm");          console.log(car2);
            //  构造函数        function Car(size,color,logo){            this.color = color;            this.logo = logo;            this.size = size;        }        var car3 = new Car("5","green","dazhong");        console.log(car3);
            var car4 = new Car("6","black","jiefang");        console.log(car4);
            //原型方式              function Car(){            Car.prototype.color = "red";            Car.prototype.size = "7";            Car.prototype.logo = "dongfanghong";
            }        var car5 = new Car();        console.log(car5);        var car6 = new Car();        console.log(car6);
            //混合构造、原型方法        function Cat(age,color){            this.age = age;            this.color = color;        }        Cat.prototype.eat = function(){            console.log("吃五个老鼠!");        }        var cat1 = new Cat("3","white");        console.log(cat1);         var cat2 = new Cat("4","black");        console.log(cat2);
            //动态原型方法        function Cat(age,color){            this.age = age;            this.color = color;            if(typeof Car._initialized == "undefined"){                Car.prototype.eat = function(){                    console.log("吃五个老鼠!")                }                Car._initialized == true;            }        }
            //对象连接字符串        function StringBuffer(){            this._strings_ = new Array();        }        StringBuffer.prototype.append = function(str){            this._strings_.push(str);        }        StringBuffer.prototype.toString = function(str){            return this._strings_.join("");        }
            var buffer = new StringBuffer();        buffer.append("hello");        buffer.append("world");        buffer.append("  nihao");        console.log(buffer.toString());
            //修改对象
            //通过已有的方法创建新方法        Number.prototype.toHexString = function(){            return this.toString(16);        }        var b = 15;        console.log(b.toHexString());
            //重命名已有方法        Array.prototype.enqueue = function(item){            this.push(item);        }        Array.prototype.dequeue = function(){            this.shift();        }        var arr = ["1","a"];        arr.enqueue("b");        console.log(arr);        arr.dequeue("1");        console.log(arr);
            //添加新方法        Array.prototype.indexOf = function(item){            for(var i=0;i<this.length;i++){                if(this[i] == item){                  return i;                 }                           }            return -1;        }       console.log(arr.indexOf("b"));
           //为本地对象添加新方法       //如果想给 ECMAScript 中每个本地对象添加新方法,必须在 Object 对象的 prototype 属性上定义它。       Object.prototype.showValue = function(){        console.log(this.valueOf());       }       var str = "hello";       str.showValue();
        //重定义已有的方法//     Function.prototype.toString = function(){//      return "function code hidden!";//     }//      function sayHi(){//          console.log("hi");//      }//      console.log(sayHi.toString());
        //覆盖原始方法前,比较安全的做法是存储它的指针,以便以后的使用。有时你甚至可能在新方法中调用原始方法       Function.prototype.originToString = Function.prototype.toString;       Function.prototype.toString = function(){        if(this.originToString().length>20){            return "Function too long to display!"        }else{            return this.originToString();        }       }       function sayHi(){            console.log("hi");        }       console.log(sayHi.toString());
        //极晚绑定,先实例化对象,再定义方法,也能把方法给到之前创建的实例, 不建议这么用       var o = new Object();       Object.prototype.sayHi = function(){        console.log("hi");       }       o.sayHi();      
        /*所谓绑定(binding),即把对象的接口与对象实例结合在一起的方法。       早绑定(early binding)是指在实例化对象之前定义它的属性和方法,这样编译器或解释程序就能够提前转换机器代码。          在 Java 和 Visual Basic 这样的语言中,有了早绑定,就可以在开发环境中使用 IntelliSense(即给开发者提供对象中属性和方法列表的功能)。       ECMAScript 不是强类型语言,所以不支持早绑定。       另一方面,晚绑定(late binding)指的是编译器或解释程序在运行前,不知道对象的类型。       使用晚绑定,无需检查对象的类型,只需检查对象是否支持属性和方法即可。ECMAScript 中的所有变量都采用晚绑定方法。这样就允许执行大量的对象操作,而无任何惩罚。*/        </script>    </body></html>

  • 相关阅读:
    了解大数据的特点、来源与数据呈现方式
    作业五 | 结对项目-四则运算 “软件”之升级版
    作业四 | 个人项目-小学四则运算 “软件”之初版
    作业三 | 阅读《构建之法》1-5章
    作业二 | Git的安装与使用
    随笔 | 对计算机专业的自我思考
    【大数据作业二】字符串操作,英文词频统计预处理
    【大数据作业一】了解大数据的特点、来源与数据呈现方式
    结对项目——四则运算 “软件”之升级版
    作业四 个人项目-小学四则运算 “软件”
  • 原文地址:https://www.cnblogs.com/chengyunshen/p/9262111.html
Copyright © 2011-2022 走看看