简述 Javascript 中 this 的指向有哪些

// 在html中直接调用 
            // console.log(this)  //Window
            
            //在function中调用
            // function a(){
            //  let b = "aaaaa"
            //  console.log(this.b)  //指向Window  结果为undefined
            //  }
            // a()
            
            // 在对象中调用
            // this是对象自身
            // let user = "哈哈哈"
            // var o = {
            //     user:"追梦子",
            //     fn:function(){
            //         console.log(this.user);  //追梦子
            //     }
            // }
            // o.fn();
            
            // 对象的属性 → 调用
            // 对象的属性是什么,则this指的是什么。
            // this指的是直接调用的那个环境。
            // var o = {
            //     user:"追梦子",
            //     fn:function(){
            //         console.log(this.user); //追梦子
            //     }
            // }
            // window.o.fn(); // 并不指向window
            // var o = {
            //     a:10,
            //     b:{
            //         a:12,
            //         fn:function(){
            //             console.log(this.a); //12
            //         }
            //     }
            // }
            // o.b.fn(); // 指向b 对象的属性是什么,则this指的是什么
            
            // var o = {
            //     a:10,
            //     b:{
            //         a:12,
            //         fn:function(){
            //             console.log(this.a); //undefined
            //             console.log(this); //window
            //         }
            //     }
            // }
            // var j = o.b.fn;
            // j(); // 指向window,虽然看起来貌似是来自b,但实际调用是全局环境。
            
            
            // 作为构造函数→被调用
            // new:会改变this的指向,把this指向新创建的对象
            // 所以其实是用新对象去创建函数的实例,那么调用的其实是新对象
            // function Fn(){
            //     this.user = "追梦子";
            // }
            // var a = new Fn(); // 此时指a
            // console.log(a.user); //追梦子
            
            // 构造函数→包含return的时候
            // return对象:this为自己 则指向函数自己
            // function fn()  
            // {  
            //     this.user = '追梦子';  
            //     return {};  
            // }
            // var a = new fn();  
            // console.log(a.user); // 无法赋值:undefined
            
            // return其他:正常
            // function fn()  
            // {  
            //     this.user = '追梦子';  
            //     return 1;
            // }
            // var a = new fn();  
            // console.log(a.user); // 正确赋值:追梦子

转载 :https://www.wolai.com/mary/s68f7TeuwYXmkajGEozdS9

猜你喜欢

转载自blog.csdn.net/wanghongpu9305/article/details/113198107