目录
  1. 1. 相同点
  2. 2. 不同点
    1. 2.1. call与apply
    2. 2.2. call与bind
  3. 3. 注意
    1. 3.1. call()、apply()、bind()等方法不能改变箭头函数中this的指向
    2. 3.2. 箭头函数没有自己的arguments
  4. 4. 用法
    1. 4.1. 判断数据类型
    2. 4.2. vue中使用debounce的坑
call,apply与bind的区别与联系

相同点

改变this的指向,让x2调用x1的方法

不同点

call与apply

参数的不同,

//例如:
var obj = {}//定义一个空的对象
function f(x,y){
console.log(x,y)
console.log(this) //this是指obj
}
f.apply(obj,[1,2]) //后面的值需要用[]括起来
f.call(obj,1,2) //直接写

call()的第一个参数是this要指向的对象,后面传入的是参数列表,参数可以是任意类型,当第一个参数为null、undefined的时候,默认指向window;
apply():第一个参数是this要指向的对象,第二个参数是数组

call与bind

call()改过this的指向后,会再执行函数,bind()改过this后,不执行函数,会返回一个绑定新this的函数

//例如:
function f(){
console.log("看我怎么被调用");
console.log(this) //指向this
}
var obj = {};
f.call(obj) //直接调用函数
var g = f.bind(obj); //bind()不能调用函数
g(); //此时才调用函数

注意

call()、apply()、bind()等方法不能改变箭头函数中this的指向

var id = 'Global';
let fun1 = () => {
console.log(this.id)
};
fun1(); // 'Global'
fun1.call({id: 'Obj'}); // 'Global'
fun1.apply({id: 'Obj'}); // 'Global'
fun1.bind({id: 'Obj'})(); // 'Global'

箭头函数没有自己的arguments

箭头函数没有自己的arguments对象。在箭头函数中访问arguments实际上获得的是它外层函数的arguments值。
js面试题-大四学生总结

用法

判断数据类型

Object.prototype.toString.call("qq")

vue中使用debounce的坑

  1. 这里注意,不要在debounce里写箭头函数,否则this的指向就是undefined,而不是Vue实例对象了。
  2. vue中使用需要直接返回一个debounce函数
    methods:{
    _jumpLeftToCenter: debounce(function (dataIndex) {
    this._throw(dataIndex)
    // console.log(dataIndex)
    }, 200),
    }
    参考vue中的debence的使用错误问题
文章作者: ruqiuvy
文章链接: https://github.com/yiyeruqiuvy/2022/10/31/apply%E4%B8%8Ebind%E7%9A%84%E5%8C%BA%E5%88%AB%E4%B8%8E%E8%81%94%E7%B3%BB/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 一夜入秋非生之所
打赏
  • 微信
  • 支付寶

评论