zoukankan      html  css  js  c++  java
  • ES6_函数方法

      1     //2017/7/15
      2         //Javascript 中的方法:在一个对象中绑定函数,称为这个对象的方法。
      3         /*1*/
      4         var boy={
      5             name:'xiaoming',
      6             birth:2007,
      7             age:function(){
      8                 var y=new Date().getFullYear();
      9                 return y-this.birth;//注意这里的this,在这个方法内部,this始终指向当前对象,也就是boy这个对象,this.birth可以取到boy对象里的birth的值。
     10             }
     11         };
     12 
     13         console.log(boy.age);//打印出整个函数
     14         console.log(boy.age());//10
     15 
     16         /*2*/
     17         function getAge(){
     18             var y=new Date().getFullYear();
     19                 return y-this.birth;
     20         }
     21 
     22         var boy={
     23             name:'xiaoming',
     24             birth:2007,
     25             age:getAge
     26         }
     27 
     28         console.log(boy.age());//10
     29         console.log(getAge());//NaN。注意:这里单独调用getAge()函数,该函数的this指向全局对象,也就是window。
     30 
     31         /*3*/
     32         var fn=boy.age;//不能先拿到boy的age函数,要保证this指向正确,必须用obj.xxx()的形式调用。
     33         console.log(fn());//NaN。
     34 
     35 
     36         /*4*/
     37         //this的指向是个大问题,ECMA决定,在strict模式下让函数的this指向undefined,因此,在strict模式下,我们会得到一个错误,这只是让错误暴露出来,并没有解决this应该指向的正确位置。
     38 
     39         "use strict";
     40         var xiaoming={
     41             name:"xiaoming",
     42             birth:2007,
     43             age:function(){
     44                 var y=new Date().getFullYear();
     45                 return y-this.birth;
     46             }
     47         };
     48 
     49         var fn=xiaoming.age;
     50         fn();//Uncaught TypeError: Cannot read property 'birth' of undefined
     51 
     52         /*5*/
     53         "use strict";
     54         var xiaoming={
     55             name:"xiaoming",
     56             birth:2007,
     57             age:function(){
     58                 function getAge(){
     59                     var y=new Date().getFullYear();
     60                     return y-this.birth;
     61                 }
     62                 return getAge();
     63             }
     64         };
     65         xiaoming.age();//es6.html:426 Uncaught TypeError: Cannot read property 'birth' of undefined
     66         console.log(xiaoming.age());//在非strict模式下:NaN
     67 
     68         //这是因为this指针只在age方法的函数内指向xiaoming,在函数内部定义的函数又指向undefined(在非strict模式下,它重新指向全局对象window!)。
     69 
     70         /*6*/
     71        //修复方法:用一个that变量首先捕获this。
     72 
     73         "use strict";
     74         var xiaoming={
     75             name:"xiaoming",
     76             birth:2007,
     77             age:function(){
     78                 var that=this;//一开始就捕获this,可以放心地在其他方法内部定义其他函数,而不是吧所有的语句都写在同一个方法中。
     79                 function getAge(){
     80                     var y=new Date().getFullYear();
     81                     return y-that.birth;
     82                 }
     83                 return getAge();
     84             }
     85         };
     86         // xiaoming.age();
     87         console.log(xiaoming.age());//10
     88 
     89         /*7*/
     90         //用apply修复getAge()调用
     91         //要指定函数的this指向哪个对象,可以用函数本身的apply方法,该方法接收两个参数,一个是要绑定的this变量,第二个参数是Array,表示函数本身的参数。
     92          // function getAge(){
     93              var y=new Date().getFullYear();
     94              return y-this.birth;
     95          }
     96 
     97          var xiaoming={
     98              name:"xiaoming",
     99              birth:2007,
    100              age:getAge
    101          }
    102 
    103          console.log(xiaoming.age());//10
    104          console.log(getAge.apply(xiaoming,[]));//10
    105 
    106          /*8*/
    107 
    108          //apply()方法与call()方法
    109          //apply()方法是把参数打包成Array再传入。
    110          //call()方法把参数按顺序传入。
    111 
    112          //eg:条用Math.max(3,4,5)
    113          Math.max.apply(null,[3,4,5]);//5
    114          Math.max.call(null,3,4,5);//5
    115          //对于普通函数调用,我们通常把this绑定为null。
    116 
    117          /*9*/
    118 
    119          //注意:利用apply(),可以动态改变函数的行为。以下函数的作用是统计parseInt函数被调用了几次。
    120         var count=0;
    121         var oldParseInt=parseInt;
    122 
    123         window.parseInt=function(){
    124             count+=1;
    125             return oldParseInt.apply(null,arguments)
    126         };
    127 
    128         parseInt('10');
    129         parseInt('20');
    130         console.log(count);//2
  • 相关阅读:
    js中的原生Ajax和JQuery中的Ajax
    this的用法
    static的特性
    时政20180807
    java compiler没有1.8怎么办
    Description Resource Path Location Type Java compiler level does not match the version of the installed Java project facet Unknown Faceted Project Problem (Java Version Mismatch)
    分词器
    [数算]有一个工程甲、乙、丙单独做,分别要48天、72天、96天完成
    一点感想
    解析Excel文件 Apache POI框架使用
  • 原文地址:https://www.cnblogs.com/LinSL/p/7182873.html
Copyright © 2011-2022 走看看