this不同指向问题

本文详细探讨了JavaScript中this的定义和在不同区域(全局、一般函数、嵌套函数、构造函数)的指向问题,包括this的动态绑定特性、箭头函数的特殊情况,并提供了相关代码示例和小测试,帮助理解this的复杂行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

this在不同区域的指向问题


提示:以下是本篇文章正文内容,下面案例可供参考

一、this的定义

只有函数在调用的时候this指向才确定,不调用的时候不知道指向谁 实际上this的最终指向的是那个调用它的对象

二、不同的区域下this的指向

1.全局

代码如下(示例):

 var a = 1;
 console.log(this.a);//this指向window

2.一般函数

代码如下(示例):

 function dom1() {
        var a;
        a = 2
        console.log('具名函数' + this.a);

    }
    dom1();
    //输出a为1 相当于window.dom1()是window调用的【区别为严格和非严格 不过最后都是window调用】

小测试


    var a = 1;
    function dom1() {
        var a;
        a = 2
        console.log('具名函数' + this.a);
   }
   new dom1();//?

解析:只要new了,相当于
function dom1() {
var this={}
var a;
a = 2
console.log(‘具名函数’ + this.a);
return this;
}
this.a这个a属性没有赋值 输出为//underfind


3.嵌套函数

 var name = 1;
    var obj = {
        name: 'wang',
        friends: ['zhang', 'li'],
        loop: function() {

            this.friends.forEach(
                function(friend) {
                    console.log(this.name + ' knows ' + friend);
                }
            );
        }
    };
     obj.loop();//输出1 指向windows
     //好像是foreach缘故
     参考:https://blog.csdn.net/qq_34629352/article/details/104861397

如何重定向this让其重新指向外部

var obj = {
    name: 'wang',
    friends: [ 'zhang', 'li' ],
    loop: function () {
        'use strict';
        var that = this ;//这个this指这个对象
        this.friends.forEach(
            function (friend) { 
                console.log(that.name+' knows '+friend); 
            }
        );
    }
};
obj.loop();//this指向改变,成功获取了外部数据

引用链接

https://www.cnblogs.com/webwangjie/p/14760394.html

es6 箭头函数this指向 /箭头函数里面没有this 他会在函数作用域往上拿this

 function aa(name) {
        this.name = name;
        this.age = 0;

        this.say = {
            num1: () => {

                console.log(this);
            },
            num2: function() {
                console.log('分割')
                console.log(this);

            }
        }
    }
    var p = new aa('tom');
    p.say.num1(); //指向aa这个this
    p.say.num2(); //指向say这个对象

    function aa(name) {
        this.name = name;
        this.age = 0;
        console.log(this);
        this.say = () => {
            this.age++;
            console.log(this);
        }
    }
    var p = new aa();//
    p.say();

4.构造函数

 function person1(name){
        this.name=name;//构造函数this函数指向这个实例
    }
    var p=new person1('Lucy');
    console.log(p.name);

总结

this的最终指向的是那个调用它的对象

共勉

道阻且长,行则将至!学无止境呀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值