js笔记--方法

   A

   在一个对象中绑定函数,称为这个对象的方法:

  例:

   var xiaoming = {
     name: '小明',
     birth: 1990,
     age: function () {
        var y = new Date().getFullYear();
        return y - this.birth;
     }
  };
  xiaoming.age; // function xiaoming.age()
  xiaoming.age(); // 今年调用是25,明年调用就变成26了
其中在一个方法内部,this是一个特殊变量,它始终指向当前对象,也就是xiaoming这个变量。
若将函数写在对象外部,单独调用函数则会返回NaN,因为函数相当于全局函数,this指向了window
  例:
    function getAge() {
        var y = new Date().getFullYear();
        return y - this.birth;
    }

    var xiaoming = {
        name: '小明',
        birth: 1990,
        age: getAge
    };
    xiaoming.age(); // 25, 正常结果
    getAge(); // NaN


B apply

(1)改变this指向
 要指定函数的this指向哪个对象,可以用函数本身的apply方法,它接收两个参数,第一个参数就是需要绑定的this变量,第二个参数是Array,表示函数本身的参数。
 用apply修复getAge()调用:
   例:

     function getAge() {
          var y = new Date().getFullYear();
          return y - this.birth;
    }

    var xiaoming = {
         name: '小明',
         birth: 1990,
         age: getAge
    };
    xiaoming.age(); // 25
    getAge.apply(xiaoming, []); // 25, this指向xiaoming, 参数为空

  另一个与apply()类似的方法是call(),唯一区别是:

    • apply()把参数打包成Array再传入;

    • call()把参数按顺序传入。


  比如调用Math.max(3, 5, 4),分别用apply()call()实现如下:

   Math.max.apply(null, [3, 5, 4]); // 5
   Math.max.call(null, 3, 5, 4); // 5

  对普通函数调用,我们通常把this绑定为null

(2)动态改变函数的行为

  例:

    想统计一下代码一共调用了多少次parseInt()?

    解题思路:自己重新写一个函数来替换js默认的parseInt()函数    

    var count = 0;
    var oldParseInt = parseInt; // 保存原函数
    window.parseInt = function () {
        count += 1;
        return oldParseInt.apply(null, arguments); // 调用原函数
    };


摘抄自廖雪峰老师的官方网站
 
posted @ 2019-09-04 16:16  菠萝tang的学习日记  阅读(176)  评论(0编辑  收藏  举报