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]。

    【完】

    一切皆为虚幻

  • 相关阅读:
    ZOJ 1002 Fire Net
    Uva 12889 One-Two-Three
    URAL 1881 Long problem statement
    URAL 1880 Psych Up's Eigenvalues
    URAL 1877 Bicycle Codes
    URAL 1876 Centipede's Morning
    URAL 1873. GOV Chronicles
    Uva 839 Not so Mobile
    Uva 679 Dropping Balls
    An ac a day,keep wa away
  • 原文地址:https://www.cnblogs.com/tangjiao/p/9914266.html
Copyright © 2011-2022 走看看