我们先从一道简单的题目开始,前几天在git上看到的:

定义log方法,它可以代理console.log的方法。
log(1,2,3)  =>  1 2 3

通常,你的答案会是这样的:

function log(){
var args = Array.prototype.slice.call(arguments);
console.log.apply(console, args);
};

直到有一天,你看到一个非常高大上的答案:

function log(){
Function.prototype.apply.call(console.log,console, arguments);
};

Function.prototype.apply.call。。。。这是什么鬼???

好吧,那你一定认识Function.prototype.apply吧,我们将它缓存一下:
var core_apply=Function.prototype.apply;
core_apply.call(console.log,console, arguments)我们可以将它分解下

  1、调用core_apply方法,console.log是core_apply这个方法的this指向,console,arguments是要传给core_apply这个方法的参数。

  也就是说,它其实等同于

console.log.core_aply(console,arguments);

=》

调用console.log()方法,this指向console,传入的参数为arguments.

Function.prototype.apply.call的更多相关文章

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

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

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

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

  3. 探索 Reflect.apply 与 Function.prototype.apply 的区别

    探索 Reflect.apply 与 Function.prototype.apply 的区别 众所周知, ES6 新增了一个全局.内建.不可构造的 Reflect 对象,并提供了其下一系列可被拦截的 ...

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

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

  5. Function.prototype.call 和 Function.prototype.apply 的区别

    call和apply函数是function函数的基本属性,都可以用于更改函数对象和传递参数,是前端工程师常用的函数.具体使用方法请参考以下案列: 例如: 申明函数: var fn = function ...

  6. Function.prototype.apply()

    文章地址:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply ...

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

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

  8. 箭头函数表达式和声名式函数表达式的区别以及 Function.prototype的bind, apply,call方法

    箭头函数不能用做构造函数 箭头函数没有arguments参数 箭头函数没有自己的this,是从作用域链上取this,是与箭头函数定义的位置有关的,与执行时谁调用无关,所以用call,apply,bin ...

  9. Function.prototype.call.apply()方法

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

随机推荐

  1. super.onCreate(savedInstanceState) 以及onCreate(Bundle savedInstanceState, PersistableBundle persistentState)

    super.onCreate(savedInstanceState) 调用父类的onCreate构造函数. 当一个Activity在生命周期结束前,会调用onSaveInsanceState()这个回 ...

  2. 基于OpenCV的面部交换

    需要装python库 OpenCV dlib docopt(根据打开方式选择是否装) # -*- coding: UTF-8 #本电脑试运行 命令 python F:\python_project\s ...

  3. AndyQsmart ACM学习历程——ZOJ3870 Team Formation(位运算)

    Description For an upcoming programming contest, Edward, the headmaster of Marjar University, is for ...

  4. border-radius实现圆弧阴影效果

    1 原理 利用border-radius实现一个圆弧边的矩形,并添加box-shadow,然后放在目标元素的下方 demo: html <div class="demo1"& ...

  5. C#窗体上绘制矩形

    先上效果图 鼠标三个事件 private void Form1_MouseDown(object sender, MouseEventArgs e) { //记录开始点 this.mousedown ...

  6. MVN&nbsp;命令行

    Maven依赖查询: http://mvnrepository.com/ Maven常用命令:  1. 创建Maven的普通java项目:     mvn archetype:create     - ...

  7. 《精通Spring4.X企业应用开发实战》读后感第五章(<bean>之间的关系\整合多个配置文件)

  8. Centos7 安装vim8

    一.卸载旧版本的vim yum -y remove vim* 二.安装终端字符处理库ncurses yum -y install ncurses-devel 三.下载Vim8 wget https:/ ...

  9. 蜂窝网络TDOA定位方法的Fang算法研究及仿真纠错

    科学论文为我们提供科学方法,在解决实际问题中,能极大提高生产效率.但论文中一些失误则可能让使用者浪费大量时间.自己全部再推导那真不容易,怀疑的成本特别高,通常不会选择这条路.而如果真是它的问题,其它所 ...

  10. tidb 安装deploy-ntp.yml失败,什么原因?

    在同步时间服务的时候报错,信息如下.实际上我配置的时间服务器的IP就是如下的10.188.100.103,在 执行$ansible-playbook -i hosts.ini deploy_ntp.y ...