javascript技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript技巧 > JS函数call apply方法

JS函数的call和apply的实现方法区别分析

作者:阳哥

这篇文章主要为大家介绍了JS函数的call和apply的实现方法区别分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

 方法示例

//apply用法
        function A(alpha,age){
            this.name = 'bob';
            alert(alpha + arguments[1] + this.name)
        }
        (function(){
            A.apply(this,['a',25])
        })()
        
        //call方法
        function B(alpha){
            this.name = 'alice';
            alert(alpha + this.name)
        }
        
        (function(){
            B.call(this,'b')
        })()
        
        //普通函数
        function love(alpha){
            this.name = 'alice';
            alert(alpha + this.name)
        }
        
        (function(){
            love.call(this,'love')
        })()
        //async函数
        async function create(alpha){
            this.name = 'op';
            var res = await compute();
            alert(alpha + this.name + res)
        }
        (function(){
            create.call(this,'b')
        })()
        //generator函数
        function * gen(num){
            console.log(num);
            num ++;
            yield 'first'
            yield 'then'
            yield 'final'
            return num
        }
        (function(){
            gen.call(this,0)
        })()
        
        let it = gen(3);

          console.log(it.next())  // {value: "first", done: false}
          console.log(it.next())   // {value: "then", done: false}
          console.log(it.next())   // {value: "final", done: false}
          console.log(it.next())   // {value: "4", done: true}
          
          
          function compute(){ 
              var num = 0;
              for(let i = 0; i < 10 ; i++){//1+2+3+4+5+ ... + 9 =>(1+9)*9/2 = 45
                  num += i;
              }
              return num
          }

apply和call方法的相同点

可以使得宿主(当前函数对象)在其自己作用域进行执行,比如在第一个实例中,使用call和apply的第一个参数context(上下文),也可称为this对象,传递给构造函数A,此时this的作用域为当前构造函数A下。

不同点

传递的参数不同,call第二个参数传递的可以是任何数据类型 函数、数组...,而apply传递的是必须是数组或者类数组。

两个方法该如何选择?

根据你要传入的参数来做选择,不需要传参或者只有1个参数的时候,用call,当要传入多个对象时,用apply

以上就是JS函数的call和apply的实现方法区别分析的详细内容,更多关于JS函数call apply方法的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文