关于call()的this指向研究
以前看过一些文档,一直以为自己懂了,今天一看其实懂的还是比较模凌两可。先说一些代码吧
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指向研究相关推荐
- 关于ESI研究前沿的思考和使用方法研究
边文越 李国鹏 周秋菊 冷伏海 中国科学院科技战略咨询研究院.原文发表于<情报学报> DOI:10.3772/j.issn.1000-0135.2022.03.004 摘要 近 ...
- 【安全漏洞】苹果取证的分析
"nfs"文件系统的mount()系统调用存在双重获取漏洞. 理论上,Double Fetch是一个有条件的竞争漏洞,这是一场内核模式和用户模式之间的数据访问的较量.Double ...
- 浅谈Green公式和外微分形式
数学分析大作业6,时隔一年半才想起来没发. 衷心感谢北航的杨小远老师. 希望学弟学妹们能够继续认真的完成杨老师的大作业. 经过一年半的继续学习和理解才发现 Green公式的作用,到用Green函数解偏 ...
- 关于Visual C#装箱与拆箱的研究
关于Visual C#装箱与拆箱的研究 2004-09-15 作者: 出处: CSDN 在对这个问题展开讨论之前,我们不妨先来问这么几个问题,以系统的了解我们今天要探究的主题. 观者也许曾无数次的使 ...
- 深入研究ConcurrentHashMap 源码从7到8的变迁
ConcurrentHashMap是线程安全且高效的HashMap 1 为什么要使用ConcurrentHashMap 线程不安全的HashMap HashMap是Java中最常用的一个Map类,性能 ...
- 迁移学习前沿研究亟需新鲜血液,深度学习理论不能掉链子
作者 | Frederico Guth,Teófilo Emidio de Campos 编译 | 夕颜 出品 | AI科技大本营(ID:rgznai100) [导读]人类可以从很少的样本中学习,显示 ...
- 刘群:华为诺亚方舟NLP预训练模型工作的研究与应用 | AI ProCon 2019
演讲嘉宾 | 刘群(华为诺亚方舟实验首席科学家) 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) 预训练语言模型对自然语言处理领域产生了非常大的影响,在近期由CSDN主办的 ...
- Hinton再挖新坑:改进胶囊网络,融合Transformer神经场等研究
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI 你还记 ...
- 30 篇亮点论文、5 大主题带你一览 ECCV 2020研究趋势
编译 | 陈彩娴.Barack 编辑 | 陈彩娴 转自 | AI科技评论 ECCV 2020已圆满落幕.会议收到了1360篇论文投稿,其中包含104篇Oral论文.160篇Spotlight论文和10 ...
- 通过源代码研究ASP.NET MVC中的Controller和View(二)
通过源代码研究ASP.NET MVC中的Controller和View(一) 在开始之前,先来温习下上一篇文章中的结论(推论): IView是所有HTML视图的抽象 ActionResult是Cont ...
最新文章
- 开源社区的危机:拒绝被“白嫖”?2大著名项目遭作者破坏
- c语言 函数的参数传递示例_C ++中带有示例的nearint()函数
- Apple Watch再立功!67岁男子意外摔倒后得救
- 如何让ul的符号隐藏_如何对文件进行加密?分享一下我对文件进行加密的方法(菜鸟级)...
- 数据结构 1-0 绪论
- 漫画:为什么计算机起始时间是 1970 年 1 月 1 日?
- 如何使用CleanMyMac清理Mac苹果电脑中DNS缓存?
- 20行代码教你用python给证件照换底色
- 什么是深拷贝与浅拷贝
- Springboot(大总结)
- 在windows上配置本地域名解析,配置hosts文件
- 【做项目】基于SpringBoot从零开发的个人博客 —— 从技术选型到部署实战(附学习路线)
- saltstack内置执行模块列表
- js判断手机的横竖屏调整样式
- 做好SEO必备的三步骤
- 金仓数据库KingBaseES V7安装指南
- 【Spring Boot】 过滤器、监听器、拦截器的使用
- LSP(Layered Service Provider)入门的基础知识概念
- perl正则表达式匹配后的各种变量
- bean:write用法
热门文章
- html++留言板增加删除,实现留言板删除留言的具体思路跟操作
- 拍照区域遮盖层_真石漆与一般涂料所用外墙腻子层,有什么区别?
- arm汇编—str,mov等指令
- ffmpeg代码实现自定义decoder
- makefile函数集锦
- python的requests的使用
- storm流式处理框架
- mysql 单例模式_php基于单例模式封装mysql类完整实例
- 杭州师范大学计算机考研难度,杭州师范大学网络空间安全考研难吗
- html5 progress css,CSS内容:HTML5进度上的attr()不起作用