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

    【完】

    一切皆为虚幻

  • 相关阅读:
    三种回归算法及其优缺点
    线性回归于逻辑回归的区别
    置信度与置信区间
    js表单验证是否为合法数据
    unity变换游戏对象
    Unity克隆物体
    Unity创建游戏对象_位置,大小,旋转
    Unity GUI获取玩家名字并在控制台输出
    算法竞赛入门经典_暴力求解法
    java Swing组件的对齐问题2
  • 原文地址:https://www.cnblogs.com/tangjiao/p/9914266.html
Copyright © 2011-2022 走看看