0
点赞
收藏
分享

微信扫一扫

call()、apply()、bind()的使用和区别以及使用场景

进击的包籽 2022-04-18 阅读 44
javascript

call()、apply()、bind()的共同点:

        都可以改变this指向

call的使用

var str = 'window';
var obj = { str: 'obj内的str' };
function fun() {
    console.log(this, this.str);
}
fun.call(obj); //call立即执行
fun();

apply的使用

var str = 'window';
var obj = { str: 'obj内的str' };
function fun() {
    console.log(this, this.str);
}
fun.apply(obj); //apply立即执行
fun();

bind的使用

var str = 'window';
var obj = { str: 'obj内的str' };
function fun() {
    console.log(this, this.str);
}
fun.bind(obj)(); //bind不会立即执行因为bind返回的是函数
fun();

call()、apply()、bind()的区别:

  1. call、apply可以立即执行,bind不会立即执行,因为bind返回的是一个函数,需要加()才可以执行
  2. 参数不同:apply第二个参数是数组,call和bind有多个参数需要挨个写

使用场景

apply

var arr1 = [1, 2, 3, 5, 61, 65];
console.log(Math.max.apply(null, arr1));

这里直接将数组arr1放进去得到的结果是NaN,可以使用es6新增的扩展运算符,也可以使用apply,因为apply后面的参数是数组形式,由于这里不牵扯this指向问题,所以第一个参数是null

bind

<button id="btn">1111</button>
<h1 id="h1s">2222</h1>
var btn = document.getElementById('btn');
var h1s = document.getElementById('h1s');
btn.onclick = function () {
    console.log(this.id);
}.bind(h1s);

这里的this点击之后本来是指向btn的,我们通过bind改变其指向h1s,并且在这里不用加括号;

如果在这里使用call和apply会有问题,不点击就会输出this

举报

相关推荐

0 条评论