
cvte面试题——关于this指向、闭包及原型链上属性初始化的问题
发布日期:2021-05-12 21:18:15
浏览次数:19
分类:精选文章
本文共 1569 字,大约阅读时间需要 5 分钟。
cvte面试题——关于this指向和闭包的问题
一、关于this指向
首先,我们通过邹佳乐学长的一个this指向问题来先检测一下自己对于this的掌握程度。
let obj2 = { name: 'obj2'}const obj = { name: 'obj', say1() { console.log(this.name) }, obj1: { name: 'obj1', say2() { console.log(this.name); } }, say3() { const fn = () => { console.log(this.name); } fn() }, say4() { const fn = function () { console.log(this.name); } fn() }, say5() { const fn = () => { console.log(this.name); } fn.call(obj2) }, say6() { const fn = function () { console.log(this.name); } fn.call(obj2) }}let a = obj.say1let b = obj.obj1.say2a() //undefinedb() //undefinedobj.say1() //objobj.obj1.say2() //obj1obj.say3()//objobj.say4()//undefinedobj.say5()//objobj.say6()//obj2
接下来是cvte中有关于this指向的题,
关键点:这里并没有形成闭包
总结:
1、对于普通函数来说,this->window 2、全局作用域下,this -> window 3、对于对象来说,谁调用函数谁就是this 4、new 的方式,this永远被绑定在实例上 5、箭头函数本身是没有this,继承外层上下文绑定的this(包裹箭头函数的第一个普通函数的this) 6、箭头函数使用bind,call,this无效 7、bind/call/apply 这些改变上下文的 API 了,对于这些函数来说,this 取决于第一个参数,8、如果第一个参数为空,那么就是 window 9、不管我们给函数 bind 几次,fn 中的 this 永远由第一次 bind 决定二、关于闭包的有趣问题
关键点:这里形成了闭包
三、原型链上属性初始化的问题
在构造函数中,通过this.xxx
所访问的属性xxx
,并不会查找原型链,
xxx
,则会直接添加一个属性,不会再到原型链中添加。 如上面的b = new B(789)
中,先通过查找原型链发现value
确实存在,然后直接在b
的属性中,即b.value = 789
,而b.__proto__.value=456
,并不会有影响。
通过谷歌浏览器进行断点调试证明:
断点处:31行。 当执行完成33行时,从这里即可说明上面的分析是正确的。
继续执行完34行代码时:b.__proto__、b2.__proto__
中的属性同时被修改。

发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年04月16日 19时15分44秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
TreeSet、TreeMap
2021-05-14
ObjectInputStream、ObjectOutputStream
2021-05-14
JVM内存模型
2021-05-14
反射机制
2021-05-14
反射Field、Method、Constructor
2021-05-14
可变长度参数
2021-05-14
堆空间常用参数总结
2021-05-14
逃逸分析-堆分配对象
2021-05-14
常量池、运行时常量池
2021-05-14
3、条件查询
2021-05-14
5、分组函数 / 聚合函数
2021-05-14
8、子查询
2021-05-14
cordova打包apk更改图标
2021-05-14
开启与配置SMTP服务器
2021-05-14
域名解析步骤
2021-05-14
APP卡片式设计
2021-05-14
GitHub上传时,项目在已有文档时直接push出现错误解决方案
2021-05-14
云数据库
2021-05-14
大数据在不同领域的应用
2021-05-14
页面置换算法
2021-05-14