面试笔试题分析之一

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指向调用这些方法的对象,

  1. 函数的定义位置不影响其this指向,this指向只和调用函数的对象有关。(this的指向在定义时不能确认,只有在调用时才能最终确定)
  2. 多层嵌套的对象,内部方法的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。

 

//分析来源this 指向详细解析(箭头函数) - Chris-dc - 博客园 (cnblogs.com)

 

posted @   铜须的编程生活  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示