美文网首页
[前端]call、apply的区别和使用场景?

[前端]call、apply的区别和使用场景?

作者: 半颗糖嘿 | 来源:发表于2022-10-01 21:45 被阅读0次

1.call和apply的区别
call方法和apply方法:作用都是改变this指向。(将某个方法借用给某个对象使用)
语法:
被借用的对象.方法.call(借用对象)
被借用的对象.方法.apply(借用对象)
特点:
①借用方法之后立即执行。
②借用之后,函数内部的this指向了借给的那个对象。
不同点:
①call方法传参,第二个参数起,和函数参数一样,用,(逗号)隔开,传递的参数就是传给函数的参数。
②apply方法传参,将所有传递给函数的参数,打包成一个数组,作为apply的第二个参数。
例如:

obj.add.call(obj2,10,20);
obj.add.apply(obj2,[10,20]);

2.call和apply的使用场景
① js的继承(原型链继承,构造函数继承)
② js的数据类型
{} [] 判断 => 如果使用tyepof是无法判断的
eg:typeof {}
typeof []
二者结果为'object'
解决方法:

console.log(Object.prototype.toString.call({})==='[object Object]');
console.log(Object.prototype.toString.call([])==='[object Array]');

③ es5把伪数组转化成数组。

function get() {
    console.log(arguments);
    console.log([...arguments]);
    console.log(Array.prototype.slice.call(arguments));
}
get(1,2,3);

相关文章

网友评论

      本文标题:[前端]call、apply的区别和使用场景?

      本文链接:https://www.haomeiwen.com/subject/byakartx.html