javaScript中this指向问题

82 阅读1分钟

this绑定方式(只涉及非严格模式下)

  1. 默认绑定(this指向window)

    function fn() {
    	console.log(this); // window
    }
    fn();
    
  2. 隐式绑定(指向调用对象)

           let obj = {
                name: "Tom",
                age: 12,
                fn: function () {
                    console.log(this.name)
                },
                arrFn: () => {
                    console.log(this)
                },
                gender: this
            }
            obj.fn(); //obj,fn为普通函数,由obj调用
            obj.gender; //window,字面量指向window
    
  3. 显示绑定(由call(),apply(),bind()指定绑定对象)

    var a = "outter a"
    var b = {a:"bind b"}
    function fn() {
    	console.log(this.a)
    };
    fn(); // window  `outter a`
    fn.call(b); // b `bind b`
    
  4. 构造函数绑定

    function Person (name) {
      console.log(this)
    }
    var name = 'outer'
    var person1 = new Person('paramName') // person1,指向实例对象
    
  5. 箭头函数(call(),apply(),bind()改变this无效

           let obj = {
                name: "Tom",
                age: 12,
                fn: function () {
                    console.log(this.name)
                },
                arrFn: () => {
                    console.log(this)
                },
                gender: this
            }
            obj.fn(); //obj,fn为普通函数,由obj调用
            obj.gender; //window,字面量指向window
            obj.arrFn(); // window,指向obj(arrFn的父级)申明的上下文