zoukankan      html  css  js  c++  java
  • Function.prototype.call.apply()方法

    在看uncurrying化函数时候,碰到了Function.prototype.call.apply()的用法:

    先说说uncurrying()函数:

    Function.prototype.uncurrying = function(){
       var self = this;
       return function(){
           var obj = Array.prototype.shift.call(arguments);
           return self.apply(obj,arguments);
       }
    }

    然后可以通过var call = Function.prototype.call.uncurrying()进行函数参数的调用:

    var call = Function.prototype.call.uncurrying();
    var fn = function(name){
        console.log(name);
    }
    call(fn,window,'sven');

    最后输出的是://sven

    怎么解释这段代码呢?

    Function.prototype.call.apply(fn,[window,'sven']);
    Function.prototype.call.call(fn,window,'sven');
    fn.functionCall(window,'sven');  
    window.fn('sven'); //'sven

    可以先将apply的调用转化为call的调用方式,而后改变this指向,fn拥有call的方法,再window拥有fn的方法,参数'sven'输入进去,最后输出sven。

     再看下Function.prototype.apply.apply()方法的调用:

    var apply = Function.prototype.apply.uncurrying();
    var fn = function(name){
        console.log(this.name);  //sven
        console.log(arguments);  //[1,2,3]
    }
    apply(fn,{name:'sven'},[1,2,3]);
    
    Function.prototype.apply.apply(fn,[{name:'sven'},[1,2,3]]);
    Function.prototype.apply.call(fn,{name:'sven'},[1,2,3]);
    fn.FunctionApply({name:'sven'},[1,2,3]);

    最后转化时候,this对象指向{name:'sven'},arguments此时是[1,2,3]。

    【完】

    一切皆为虚幻

  • 相关阅读:
    vue.nextTick()方法简单理解
    vue中 hash和history的区别
    Set,Map一些常见的遍历方法以及转化方法
    vue中import和require的用法
    $route和 $router的区别是什么
    vue vmodel的总结
    vue router的钩子函数总结
    了解promise和async await的区别
    ZOJ 1642 Match for Bonus
    UVA 10003 Cutting Sticks
  • 原文地址:https://www.cnblogs.com/tangjiao/p/9914266.html
Copyright © 2011-2022 走看看