面试笔试题分析之一
function sendPost(callback) {
callback();
}
const manager = {
counter: 1,
increase() {
function onSuccess() {
console.log(this);
}
this.counter++
sendPost(onSuccess)
}
}
manager.increase()
//输出 undefined。
//原因:函数shendPost是在外面定义的window上的函数,所以内部this指向window,
//在另一个定义对象中调用shendPost函数其内部的this指向不会改变,因为this是谁调用指向谁。
情况1:如果一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的就是window,这里需要说明的是在js的严格版中this指向的不是window,但是我们这里不探讨严格版的问题,你想了解可以自行上网查找。
情况2:如果一个函数中有this,这个函数有被上一级的对象所调用,那么this指向的就是上一级的对象。
情况3:如果一个函数中有this,这个函数中包含多个对象,尽管这个函数是被最外层的对象所调用,this指向的也只是它上一级的对象,例子3可以证明,
————————————————
版权声明:本文为CSDN博主「weixin_46509688」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_46509688/article/details/105115396
1.全局情况下
在全局环境下,this 始终指向全局对象(window), 无论是否严格模式;
function show(){
console.log(this);
}
show();//指向window,因为show方法定义在window上,是通过window方法调用的。
//这句话实际上等价于window.show();
2.函数直接调用
非严格模式下,this 默认指向全局对象window
而严格模式下, this为undefined
var name="the window";
var object={
name:"silence",
packname:function(){
return this.name;
}
}
var show=object.packname;
console.log(show());
//当没有明确的执行时的当前对象时,this指向全局对象window。
这里show=object.packname;
show();//函数直接调用
这里show没有明确的指明执行对象,所以等同于 window.show();结果是 the window
3.对象内部的this指向
对象内部方法的this指向调用这些方法的对象,
- 函数的定义位置不影响其this指向,this指向只和调用函数的对象有关。(this的指向在定义时不能确认,只有在调用时才能最终确定)
- 多层嵌套的对象,内部方法的this指向离被调用函数最近的对象(window也是对象,其内部对象调用方法的this指向内部对象, 而非window)。
//1
var o = {
prop: 37,
f: function() {
return this.prop;
}
};
//通过对象.方法调用,this会指向对象
console.log(o.f()); //37
//定义了这个方法,但是没有调用,不确定this指向
var a = o.f;
直接调用a这个方法,相当于window.a为undefined
console.log(a()): //undefined
var o = {prop: 37};
function independent() {
return this.prop;}
o.f = independent;
//定义一个对象o,定一个方法,用o.f引用这个方法,相当于:
var o = {prop: 37,
f:function independent() {
return this.prop;}
};
通过o.f()调用,使this指向了o对象
console.log(o.f()); // 37
//2
o.b = {
g: independent,
prop: 42
};
//通过o.b来调用g()方法,使this指向了o.b
console.log(o.b.g()); // 42
3.构造函数的this
构造函数中的this与被创建的新对象绑定。
注意:当构造器返回的默认值是一个this引用的对象时,可以手动设置返回其他的对象,如果返回值不是一个对象,返回this。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本