js this 指向 问题小结

  function name() {
            var a = "A";
            console.log(this.a); //undefined  如果a 在函数体外,则结果是A
            console.log(this); //Window
        };
        name();    相当于 window.name()
 
 
var n = {
            name: "LonJin",
            fn: function() {
                console.log(this.name) //LonJin   谁调用指向谁
            }
        };
        n.fn(); 
 
 
 var n = {
            name: "LonJin",
            fn: function() {
                console.log(this.name) //LonJin
            }
        };
        window.n.fn();     永远指向最近的一层,这里this指向n
 
   var n = {
            a: 10,
            b: {
                a: 12,
                fn: function() {
                    console.log(this.a) //12 永远指向最近的一层  如果b 没有a 属性,这里会显示undefine
                }
            }
        };
        n.b.fn();
 
 
   //当有return 的时候  
   //如果返回值是一个对象,那么this指向的就是那个返回的对象,如果返回值不是一个对象那么this还是指向函数的实例。
        function fn() {
            this.user = "LonJin";
            return {}
        };
        var a = new fn();
        console.log(a.user); //undefined

        function A() {
            this.name = name
            return {
                name: 10
            }
        }
        const b = new A()
        console.log('b', b); // 10  
 
 
        //这里的 指的是return 的函数
        var x = 20;
        var a = {
                x: 15,
                fn: function() {
                    console.log(this);
                    var x = 30;
                    return function() {
                        return this.x
                    }
                }
            }
   
        console.log((a.fn())()); //立即执行函数this 指向window  20
        console.log(a.fn()()) //这相当于function(){}() 也是立即执行函数 //20
        console.log(a.fn().call(this)) //20
        console.log(a.fn().call(a)) //15
 
 
 
posted @ 2022-03-09 15:16  小约翰逊  阅读(25)  评论(0)    收藏  举报