this绑定方式(只涉及非严格模式下)
-
默认绑定(this指向window)
function fn() { console.log(this); // window } fn(); -
隐式绑定(指向调用对象)
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 -
显示绑定(由
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` -
构造函数绑定
function Person (name) { console.log(this) } var name = 'outer' var person1 = new Person('paramName') // person1,指向实例对象 -
箭头函数(
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的父级)申明的上下文