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

【完】

一切皆为虚幻

Function.prototype.call.apply()方法的更多相关文章

  1. Function.prototype.call.apply结合用法

     昨天在网上看到一个很有意思的js面试题,就跟同事讨论了下,发现刚开始很绕最后豁然开朗,明白过来之后发现还是挺简单的,跟大家分享下!  题目如下: var a = Function.prototype ...

  2. Function.prototype.call.apply作用详解

    关于call()和apply()基本用法可以参阅如下两篇文章: (1).call方法参阅JavaScript call()一章节. (2).apply方法参阅JavaScript apply()一章节 ...

  3. javascript中 Function.prototype.apply()与Function.prototype.call() 对比详解

    Function.prototype.apply()|Function.prototype.call() apply()方法可以在使用一个指定的 this 值和一个参数数组(或类数组对象)的前提下调用 ...

  4. 关于Function.prototype.apply.call的一些补充

    宿主对象,在javascript中有三类对象,本地对象,内置对象和宿主对象.其他两类暂且不提,宿主对象是指什么呢(DOM BOM),控制台对象是文档对象模型的扩展,也被认为是宿主对象.那么,它们有什么 ...

  5. Function.prototype.apply.call 理解分析

    首先需要了解apply,call的基本用法,其目的是改变调用方法中的this指向,将其指向为传入的对象,改变this的指向,两种方法接收参数的方式不同. 代码:console.log var cons ...

  6. js中的call和apply方法的区别

    一.call和apply的说明 1.call,apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以 ...

  7. JavaScript之call()和apply()方法详解

    简介:apply()和call()都是属于Function.prototype的一个方法属性,它是JavaScript引擎内在实现的方法,因为属于Function.prototype,所以每个Func ...

  8. JS中的call()和apply()方法区别

    如 果没接触过动态语言,以编译型语言的思维方式去理解javaScript将会有种神奇而怪异的感觉,因为意识上往往不可能的事偏偏就发生了,甚至觉得不可 理喻.如果在学JavaScript这自由而变幻无穷 ...

  9. Function.prototype.toString

    语法:fn.toString(indentation) 改方法返回当前函数源代码的字符串,而且还可对此字符串进行操作,比如: function num(){ }; var str = num.toSt ...

随机推荐

  1. Windows下 webstorm安装tomcat配置svn并使用

    先附上所需要的软件的下载地址:https://pan.baidu.com/s/1c2ripd2 1.下载并安装jdk以及配置jdk的环境变量 1)下载jdk,选择安装目录安装,我选择的是默认路径,安装 ...

  2. Rearrangement

    In a two dimensional array of integers of size 2×n2 \times n2×n, is it possible to rearrange integer ...

  3. ExecuteScalar()方法的使用

    ExecuteScalar()方法的作用是: 执行查询,并返回查询所返回的结果集中第一行的第一列.所有其他的列和行将被忽略. 1.返回的是一个object类型,也就是说是所有数据类型的基类,可根据se ...

  4. 1043 输出PATest (20 分)

    题目:1043 输出PATest (20 分) 给定一个长度不超过 1 的.仅由英文字母构成的字符串.请将字符重新调整顺序,按 PATestPATest.... 这样的顺序输出,并忽略其它字符.当然, ...

  5. JavaScript学习总结(三)BOM和DOM详解

    转自:http://segmentfault.com/a/1190000000654274 DOM介绍 D(文档)可以理解为整个Web加载的网页文档,O(对象)可以理解为类似window对象只来的东西 ...

  6. linux更改系统ulimit

    https://jingyan.baidu.com/article/c85b7a64b65d8c003aac957e.html

  7. Java IO: 网络

    原文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 校对:方腾飞 Java中网络的内容或多或少的超出了Java IO的范畴.关于Java网络更多 ...

  8. ionic3 生命周期钩子

    ionViewDidLoad 页面加载完成触发,这里的"加载完成"指的是页面所需的资源已经加载完成,但还没进入这个页面的状态(用户看到的还是上一个页面). 需要注意的是它是一个很傲 ...

  9. MOOC(1)-使用pycharm新建Django项目、开发post接口

    https://www.cnblogs.com/liqu/p/9308966.html 1.安装Django的两种方式: > 1) pip install django 2)下载离线安装包,进入 ...

  10. 吴裕雄--天生自然HTML学习笔记:HTML <head>

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...