call和bind的区别

前言:

写博客是一个很好的事情,能增加表达能力还能加深对其的理解。奈何我肚子没有墨水且技术也不厉害。也就只能记录下笔记。好了,不说废话了

正文(⊙﹏⊙) call和apply

call,apply和bind都是改变函数this执行的方法。call和apply其实是一样的,区别就在与传入的参数:
- call传入(this执行的对象,传入函数的参数1, 传入函数的参数2);
- 而apply传入的参数格式为(this指向的对象, [传入参数1,传入参数2]);

apply应该经常用在函数传递参数的情况,这种情况我也没用过

function fn1(x,y){
    fn2.apply({a:'er'}, arguments);
}
function fn2(x,y){
    console.log('this: ',this);
    console.log('x和y: ',x, y);
}
fn1(2,3);
// this:  {a: "er"}
// x和y:  2 3

这里函数的arguments以及ES6的‘…’都是数组,而apply第二个值接收的就是参数;

call和bind的区别

call等同于apply,在上文的fn1中调用了fn2然后改变了this指向。bind不同于call的区别就如同其中文意思绑定,call直接就调用了函数而bind不会调用函数而是返回一个已经更改this指向的函数上下文,这种情形举个例子:比如DOM绑定函数
HTML

<button onclick="hello.bind({x:'2'})"></button>

Javascript

function hello(){
    console.log(this);
}

当前如果不使用bind,this指向的就是button这个element对象,而现在就是指向那个带x的对象

分享 二维码
分类:代码笔记
标签:
还没有评论


在此输入评论..
0/100