内容来源:知了堂前端项目经理——蛋糕。
小伙计们,我是蛋糕哥...今天是「2020年8月20日」,今天是分享的「第34天」。非常考基础的一个题!面试题的解答限时一般是5-10分钟,所以在10分钟之内没弄出来正确答案的小伙就要认真阅读了。一来帮助成长中的小伙伴们成长(大神请忽略),二来算是磨练自己的意志,跟大家一起学习,一起成长...(不要问我为啥打这么多...成熟)。
【前端每日一题】什么是this,this的常用方式有哪些?如何改变this的指向?
答:JS在运行过程中会产生执行上下文环境(context),context记录了包含函数在哪里被调用,作用域scope,this等信息。this就是context的其中一个属性,会在函数的执行过程中使用。This是在运行时候绑定的,它指代的上下文对象取决于函数调用的各种条件。
this提供了一种优雅的方式来隐式的传递一个对象的引用,所以在函数中使用this可以更加方便的复用函数。
1、全局使用 this === window 很少使用
2、函数当中 在全局调用这个fn() this === window
3、在方法当中使用 this === 调用当前这个函数的所在的对象啊
4、构造函数this执向的是 new 创建出来的实例对象啊
5、DOM事件处理函数中的this,指向当前的DOM节点
6、通过 bind,call,apply 操作符来显示的设置 this的指向
bind:绑定函数里面的this,返回新函数,
call,apply:绑定并执行这个函数,前者传参是“,”隔开,后者是数组
7、ES6的箭头函数 箭头函数没有自己的this,父作用域的this
var x = 3;
var foo = {
x: 2,
baz: {
x: 1,
bar: function() {
return this.x;
}
}
}
var go = foo.baz.bar;
go()?
foo.baz.bar()?
//综合面试题
function Foo() {
Foo.a = function() {
console.log(1)
}
this.a = function() {
console.log(2)
}
}
Foo.prototype.a = function() {
console.log(3)
}
Foo.a = function() {
console.log(4)
}
Foo.a();
let obj = new Foo();
obj.a();
Foo.a();
你学会了吗?更多前端学习干货,欢迎关注知了编程学习圈。
知了编程学习圈zhuanlan.zhihu.com知了堂IT培训:【前端每日一题】什么是闭包,闭包的好处和坏处分别是?
知了堂IT培训:【前端每日一题】什么是作用域以及作用域链?
知了堂IT培训:【前端每日一题】如何实现继承(ES5/ES6)?
知了堂IT培训:【前端每日一题】什么是原型、原型链,有什么作用?
知了堂IT培训:【前端每日一题】在JS中什么是面向对象程序设计,面向对象设计优点?
知了堂IT培训:【前端每日一题】 说一下浏览器垃圾回收机制
知了堂IT培训:【前端每日一题】什么是浏览器缓存(知道什么是 强缓存 和 协商缓存)?
知了堂IT培训:【前端每日一题】请列举出几个常见的浏览器兼容性问题?
知了堂IT培训:【前端每日一题】HTML5常用的API有哪些?你用过哪些?
知了堂IT培训:【前端每日一题】之什么是reflow与repain?哪些操作