以前看过一些文档,一直以为自己懂了,今天一看其实懂的还是比较模凌两可。先说一些代码吧

fun.call(obj)

var a = {message: 'aa'
}
var b = function () {console.log(this.message)
}
b.call(a);   //aa,这个很简单

obj.call(obj)

var a = {say: function () {console.log(this.message)}
}
var b = {message: 'bb'
}
a.say.call(b)  //bb,这个也很简单

fun.call(fun)

function a () {this.message = "aa";
}
function b () {this.message = "bb";this.say = function () {console.log(this.message)console.log(this)}
}
var c = new a();b.call(a)  //bb
a.say();  //函数a,这个结果和console.log(a)相同
b.call(c);  //bb
c.say();   //对象a,但是内容是b函数的,这个结果和console.log(c)相同//console
bb;
function a() {this.message = "aa";
};
bb;
a {message: "bb", say: function()
};

我不知道你们有没有看懂这个输出,反正我一开始完全懵比。

当浏览器执行b.call(a)这一步的时候,a.say()的this指向指向b。

当浏览器执行b.call(c)这一步的时候,相当于执行了

this.message = "bb";
this.say = function () {console.log(this.message)console.log(this)
}

 说着说着,我又晕了。

反正当fun.call(fun)的时候,this指向前面那个fun。

当后面的fun为构造函数的时候,加入a.call(b),b为构造函数的时候,b会拥有a的方法,如果有重合的,则a的覆盖b的。

但是如果b不是构造函数的时候,b自身不会拥有a的方法,但是可以调用a的方法。

不过说句实话,在平常使用call和apply的时候,fun.call(fun)的例子也忒少了,基本都是使用obj.call(obj)。今天主要是被fun.call(fun)这个东西搞了。头都晕了。

如果有大神知道这其中的原理,就好好的帮我们解答一下啊!!谢谢了0.0

转载于:https://www.cnblogs.com/yhspehy/p/6689989.html

关于call()的this指向研究相关推荐

  1. 关于ESI研究前沿的思考和使用方法研究

    边文越   李国鹏   周秋菊   冷伏海 中国科学院科技战略咨询研究院.原文发表于<情报学报> DOI:10.3772/j.issn.1000-0135.2022.03.004 摘要 近 ...

  2. 【安全漏洞】苹果取证的分析

    "nfs"文件系统的mount()系统调用存在双重获取漏洞. 理论上,Double Fetch是一个有条件的竞争漏洞,这是一场内核模式和用户模式之间的数据访问的较量.Double ...

  3. 浅谈Green公式和外微分形式

    数学分析大作业6,时隔一年半才想起来没发. 衷心感谢北航的杨小远老师. 希望学弟学妹们能够继续认真的完成杨老师的大作业. 经过一年半的继续学习和理解才发现 Green公式的作用,到用Green函数解偏 ...

  4. 关于Visual C#装箱与拆箱的研究

    关于Visual C#装箱与拆箱的研究 2004-09-15  作者: 出处: CSDN 在对这个问题展开讨论之前,我们不妨先来问这么几个问题,以系统的了解我们今天要探究的主题. 观者也许曾无数次的使 ...

  5. 深入研究ConcurrentHashMap 源码从7到8的变迁

    ConcurrentHashMap是线程安全且高效的HashMap 1 为什么要使用ConcurrentHashMap 线程不安全的HashMap HashMap是Java中最常用的一个Map类,性能 ...

  6. 迁移学习前沿研究亟需新鲜血液,深度学习理论不能掉链子

    作者 | Frederico Guth,Teófilo Emidio de Campos 编译 | 夕颜 出品 | AI科技大本营(ID:rgznai100) [导读]人类可以从很少的样本中学习,显示 ...

  7. 刘群:华为诺亚方舟NLP预训练模型工作的研究与应用 | AI ProCon 2019

    演讲嘉宾 | 刘群(华为诺亚方舟实验首席科学家) 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) 预训练语言模型对自然语言处理领域产生了非常大的影响,在近期由CSDN主办的 ...

  8. Hinton再挖新坑:改进胶囊网络,融合Transformer神经场等研究

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 你还记 ...

  9. 30 篇亮点论文、5 大主题带你一览 ECCV 2020研究趋势

    编译 | 陈彩娴.Barack 编辑 | 陈彩娴 转自 | AI科技评论 ECCV 2020已圆满落幕.会议收到了1360篇论文投稿,其中包含104篇Oral论文.160篇Spotlight论文和10 ...

  10. 通过源代码研究ASP.NET MVC中的Controller和View(二)

    通过源代码研究ASP.NET MVC中的Controller和View(一) 在开始之前,先来温习下上一篇文章中的结论(推论): IView是所有HTML视图的抽象 ActionResult是Cont ...

最新文章

  1. 开源社区的危机:拒绝被“白嫖”?2大著名项目遭作者破坏
  2. c语言 函数的参数传递示例_C ++中带有示例的nearint()函数
  3. Apple Watch再立功!67岁男子意外摔倒后得救
  4. 如何让ul的符号隐藏_如何对文件进行加密?分享一下我对文件进行加密的方法(菜鸟级)...
  5. 数据结构 1-0 绪论
  6. 漫画:为什么计算机起始时间是 1970 年 1 月 1 日?
  7. 如何使用CleanMyMac清理Mac苹果电脑中DNS缓存?
  8. 20行代码教你用python给证件照换底色
  9. 什么是深拷贝与浅拷贝
  10. Springboot(大总结)
  11. 在windows上配置本地域名解析,配置hosts文件
  12. 【做项目】基于SpringBoot从零开发的个人博客 —— 从技术选型到部署实战(附学习路线)
  13. saltstack内置执行模块列表
  14. js判断手机的横竖屏调整样式
  15. 做好SEO必备的三步骤
  16. 金仓数据库KingBaseES V7安装指南
  17. 【Spring Boot】 过滤器、监听器、拦截器的使用
  18. LSP(Layered Service Provider)入门的基础知识概念
  19. perl正则表达式匹配后的各种变量
  20. bean:write用法

热门文章

  1. html++留言板增加删除,实现留言板删除留言的具体思路跟操作
  2. 拍照区域遮盖层_真石漆与一般涂料所用外墙腻子层,有什么区别?
  3. arm汇编—str,mov等指令
  4. ffmpeg代码实现自定义decoder
  5. makefile函数集锦
  6. python的requests的使用
  7. storm流式处理框架
  8. mysql 单例模式_php基于单例模式封装mysql类完整实例
  9. 杭州师范大学计算机考研难度,杭州师范大学网络空间安全考研难吗
  10. html5 progress css,CSS内容:HTML5进度上的attr()不起作用