关于javascript中call与apply与bind的用法

首先,他们三者最终都是用于改变this的指向。

call与apply的主要作用是让对象能以方法的方式调用函数,有什么用呢?就是对象的方法里面的this指向的是该对象而函数中的this指向的是window,所以改变了this的指向,下面来一个简单的例子

 // call与apply是改变this指向 是对象为了以方法的方式调用函数 this指向为括号内第一个参数对象
      var name = "李白";
      function info(age, sex) {
        console.log(this.name + "--" + age + "--" + sex);
      }
      info(15, "男"); //输出李白--15 因为函数内的this指向window
      var lisan = {
        name: "李三",
      };
      info.call(lisan, 67, "女"); //输出李三--67 这时候函数指向lisan这个对象
      info.apply(lisan, [67, "女"]); //输出李三--67 这时候函数指向lisan这个对象
      info.bind(lisan, 67, "女")(); //输出李三--67 这时候函数指向lisan这个对象

call第一个参数后,是你要给方法传的参数,比如:f.call(object,1,2,3,4,5)

而apply只有两个参数第一个和call一样是对象参数,第二个是数组类型参数,是将你要给方法的参数组成一个数组传入进去,比如:f.apply(object,[1,2,3,4,5])

至于bind,是es5新加的方法,它的定义是,将函数绑定到对象上,这个方法将返回一个新的函数,它的用法和参数与call很像,区别就是他只是绑定没有调用,想要调用方法就要加一个括号,比如f.bind(object,1,2,3,4,5)()

上一篇:每日一题 day 38 (DP topic)


下一篇:[USACO20FEB]Help Yourself P 题解