资讯专栏INFORMATION COLUMN

fn1.call.call(fn2);

wendux / 3212人阅读

摘要:描述输出输出问题看到这个题目,第一反应是蒙圈的。理解有些绕,需要多念叨念叨琢磨琢磨。我觉得方法本身没有具体什么出来,所以是。方法的功能把指定函数中的指向把指定函数执行那么方法中的,即为指定函数。它改变了方法原型上的的指向。

描述
function fn1(){
    console.log(1);
}
function fn2(){
    console.log(2);
}
fn1.call(fn2); // 输出1
fn1.call.call(fn2); // 输出2
问题

看到这个题目,第一反应是蒙圈的。

fn1.call(fn2); 这个是理解的。
fn1.call.call(fn2);这个蒙圈了。

理解

有些绕,需要多念叨念叨琢磨琢磨。

call 方法是Function.prototype原型上天生自带的方法,所有的函数都可以调用的。

我觉得 call方法本身没有具体return什么出来,所以是undefined

Function.prototype.call=function call(context){
    // [native code]
    // call方法的功能
    // 1. 把指定函数中的this指向context
    // 2. 把指定函数执行
    
    // 那么call方法中的this,即为指定函数。也就是说
    // 1. 把this中 的 this关键字指向context;
    // 2. 把指定函数执行this();
};
fn1.call(fn2);

按照上面的理解

call 方法中的this是fn1

把call方法中的this(fn1)中的this指向fn2

调用 call方法中的this

所以调用的是 fn1 ,此时fn1中的 this 指向的是 fn2。
但是这个方法里面并没有使用this,而是直接输出了1。

fn1.call.call(fn2);

按照上面的理解

call 方法中的 this 是 fn1.call【所有函数都可以调用call,调用的是原型上call方法】

把call方法中的this (fn1.call) 中的this 指向fn2

调用call方法中的this

所以调用的是 fn2(这里有些绕,多念叨念叨琢磨琢磨),此时fn1.call中的this指向的是fn2。
它改变了call方法(Function.prototype原型上的call)的this指向。
此处调用了call方法中的this,即调用了fn2,输出了2。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/105286.html

相关文章

  • 手写call、apply、bind函数

    摘要:函数特点可以改变我们当前函数的指向还会让当前函数执行题目自测思路解析执行传入三个参数函数内部执行传入三个参数函数内部执行 call函数 特点: 1)可以改变我们当前函数的this指向 2)还会让当前函数执行 Function.prototype.call = function (context) { if (typeof this !== function) { thro...

    gecko23 评论0 收藏0
  • 案例学习总结:原生JS实现表格排序

    摘要:最近在学习的表格排序,没想到看不起眼的表格排序实际上却暗含了众多知识点。二实现表格排序使用获取数据之所以使用动态获取数据,是为了使用文档碎片绑定数据。 最近在学习js的表格排序,没想到看不起眼的表格排序实际上却暗含了众多JS知识点。在这里记录一下此次学习过程。希望对大家也有所帮助。 完整的表格排序涉及了下列这些知识点: call方法使用 sort方法深入 数据绑定 DOM映射 下面...

    ShevaKuilin 评论0 收藏0
  • 案例学习总结:原生JS实现表格排序

    摘要:最近在学习的表格排序,没想到看不起眼的表格排序实际上却暗含了众多知识点。二实现表格排序使用获取数据之所以使用动态获取数据,是为了使用文档碎片绑定数据。 最近在学习js的表格排序,没想到看不起眼的表格排序实际上却暗含了众多JS知识点。在这里记录一下此次学习过程。希望对大家也有所帮助。 完整的表格排序涉及了下列这些知识点: call方法使用 sort方法深入 数据绑定 DOM映射 下面...

    lauren_liuling 评论0 收藏0
  • JavaScript 中如何实现函数队列?(一)

    摘要:相反,我们只需要在末尾里找出中的下一个函数,再调用第二个调用这个函数负责找出中的下一个函数并执行。我们现在来实现其实也可以用把拿出来通过去获取中的函数,每调用一次会加,从而达到取出下一个函数的目的。中大名鼎鼎的框架正是这样实现中间件队列的。 假设你有几个函数fn1、fn2和fn3需要按顺序调用,最简单的方式当然是: fn1(); fn2(); fn3(); 但有时候这些函数是运行时一个...

    Kyxy 评论0 收藏0
  • this

    摘要:全局上下文在全局中,一律指向全局对象。特殊的以下情况中的需要进行特殊记忆。构造函数当一个函数作为构造函数使用时,构造函数的指向由该构造函数出来的对象。举例使用绑定时,监听函数中的指向触发事件的,表示被绑定了监听函数的元素。执行与执行同理。 我的博客地址 → this | The story of Captain,转载请注明出处。 问:this 是什么? 答:this 是 call 方法...

    Airmusic 评论0 收藏0

发表评论

0条评论

wendux

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<