函数的内置方法call()、apply()、bind()的异同

2023-12-13 04:14:24

相同点:

? ? ? ? 1. 都可以改变this的指向

? ? ? ? 2. callapply方法,如果无参 等同于函数调用

不同点:

? ? ? ? ? 1.无参时: bind()() 等于同函数调用 ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?call()? ? ? apply() 等同于函数调用

? ? ? ? ? 2.有参时:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ①函数名.call(obj,10,20);// 有参 第一个参数必传,this指向obj ,后面的实参用逗号? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 隔开传递

? ? ? ? ? ? ? ? ? ? ? ? ? ? ②show.apply(obj,[10,20]); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 后面的实参用数组传递

? ? ? ? ? ? ? ? ? ? ? ? ? ? ③show.bind(obj,10,20)(); ?

案例

<script>
            //1.
             function show(a,b){
                console.log('a='+a,'b='+b);
                console.log(this);
             }
    
             show();
             window.show();// 谁调用了show方法this指向谁  window是顶层对旬,可以省略
    
             show.call();// 无参  等同于函数调用
             show.apply();// 无参  等同于函数调用
            // var fn= show.bind();
            // console.log(fn);// 生成一个和原函数一样的新函数
            show.bind()();
    
    
           //有参
           var obj={name:"大权"}
            // show.call(obj,10,20);// 有参  
            // show.apply(obj,[10,20]);
    
            show.bind(obj,10,20)();
        </script>

运行结果截图:

文章来源:https://blog.csdn.net/LxyingINGing/article/details/134860575
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。