apply ,call,bind 的用法。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37041355/article/details/89421285

apply 、call、bind 的用法。

  1. 作用:一种函数或方法的调用方式而已。跟函数普通的调用发送 method()不同的是,apply,call方式调用可以改变method函数里面的this指向。
  2. apply、call的区别:接收的参数方式不一样。apply接收的是参数是:Function.apply(obj,args),call接收参数是:Function.call(obj,[param1[,param2[,…]]])
//1.求一个数组的最大值。
var array = [1,3,5,6,7,9,2]
var max=Math.max.apply(null,array);  //apply会将一个数组转换为一个参数接一个参数的形式。
console.log(max) // 9

//2.合并两个数组,Array.prototype.push

var arr1 = [1,2,3,4];
var arr2 = [5,6,7,8,9];
Array.prototype.push.apply(arr1,arr2);  //返回的是数组的长度  9

console.log(arr1) //(9)[1,2,3,4,5,6,7,8,9] 

//3.实现继承

function Person(name,age) {   
    this.name=name; 
    this.age=age;   
}   
function Student(name,age,grade) {   
    console.log(arguments);  //Arguments(3) ["qian", 21, "一年级"]
    Person.apply(this,arguments); //所有传入的参数,以数组形式保存在arguments变量里面。
    this.grade=grade;   
}   
//创建一个学生类   
var student=new Student("qian",21,"大一");   
console.log(student);   
// Student {name: "qian", age: 21, grade: "大一"}
 

3. bind 的用法

创建绑定函数

bind() 最简单的用法是创建一个函数,不论怎么调用,这个函数都有同样的 this 值。JavaScript新手经常犯的一个错误是将一个方法从对象中拿出来,然后再调用,期望方法中的 this 是原来的对象(比如在回调中传入这个方法)。如果不做特殊处理的话,一般会丢失原来的对象。基于这个函数,用原始的对象创建一个绑定函数,巧妙地解决了这个问题:

this.x = 9;    // 在浏览器中,this指向全局的 "window" 对象
var module = {
  x: 81,
  getX: function() { return this.x; }
};

module.getX(); // 81

var retrieveX = module.getX;
retrieveX();   
// 返回9 - 因为函数是在全局作用域中调用的

// 创建一个新函数,把 'this' 绑定到 module 对象
// 新手可能会将全局变量 x 与 module 的属性 x 混淆
var boundGetX = retrieveX.bind(module);
boundGetX(); // 81

4.更多bind用法。

猜你喜欢

转载自blog.csdn.net/qq_37041355/article/details/89421285
今日推荐