每日一则(2):callapplybind

    xiaoxiao2021-12-14  20

    他们最重要的作用就是改变this指向,但是三个方法有相同之处也有不用之处,俺就来小小的总结下喽。

    call和apply

    1.call

    作用:

    1.调用函数(如果不传参数的话,就跟普通调用是一致的) function foo(){ console.log("holle!") } foo.call(null(用来告诉不需要改变this指向),1,2);

    2.改变所调用函数中this指针的指向后,再次调用该函数,他的指向就又是window了,意思就是他们只能改变当前绑定的函数中的this 不是永久性的改变,再次调用原函数 ,this指向就恢复了。

    function foo(){ this.nam } var obj ={ info:“tom”; } foo.call(obj);

    这个时候的this就是obj

    3.借用别的对象的方法

    2.apply

    作用:

    1.调用函数(如果不传参数的话,就跟普通调用是一致的) function foo(){ console.log("holle!") } foo.apply(null(用来告诉不需要改变this指向),【1,2】);

    2.改变所调用函数中this指针的指向后,再次调用该函数,他的指向就又是window了,意思就是他们只能改变当前绑定的函数中的this 不是永久性的改变,再次调用原函数 ,this指向就恢复了。

    function foo(){ this.nam } var obj ={ info:“tom”; } foo.apply(obj);

    这个时候的this就是obj

    3.借用别的对象的方法 例如求数组中的最大值 var arr=[1,2,3,21,55,55]. var man=Math.max.apply(null,arr);

    数组中没有max这个方法,通过apply来借用下max方法给数组用。

    3.两者的区别

    他们的作用是完全相同的,唯一区别在于传递参数的时候。 call的参数是单个的 apply的参数是一个数组

    4.什么时候用null,什么时候不用

    当你要借用别的对象的方法的时候,就要必须写null如果是直接传递普通参数,就必须写null如果传递对象就是改变他的this指向 就不用写null

    bind(ES5提供的api)

    作用

    1.改变this指向2.他也可以传递参数的(从参数的层面,跟call像)

    注意

    执行的时候并不调用函数他会返回一个新的函数,这个新的函数的内部的this指针已经改变,改变成传递进去的那个对象,原函数的this指向是不变的。

    应用场景

    setinterval((functionab){ console.log(this.info); console.loga+b); }).bind({info:“jrye”},1,1),1000

    setinterval调用的函数,不是bind调用的

    为了检测以下你是不是真的认真思考我的每一句话,给您出个小题目,做做看吧。

    function Foo(){ console.log(this.info) } Foo.bind({info:"holle"})(); Foo(); var fn= Foo.bind({info:"holle"}); fn();

    分别会输出什么?

    holle undefined holle

    做错的小朋友再仔细看看内容哦,大神就莫要见笑了。有错误的地方欢迎指出哦,俺需要你们。

    转载请注明原文地址: https://ju.6miu.com/read-970982.html

    最新回复(0)