this的指向
默认绑定:(指向window的情况)(普通函数调用模式fn())
默认情况下,this会被绑定到全局对象上,比如在浏览器环境下为window对象,在node.js环境下为global对象
message = "Hello"; function test () { console.log(this.message); } test() // "Hello"
隐式绑定:(谁调用,this指向谁)(方法调用模式 obj.fn())
如果函数的调用是从对象上发起时,则该函数中的this会被自动隐式绑定为对象
function test() { console.log(this.message); } let obj = { message: "hello,world", test: test } obj.test() // "hello,world"
显示绑定:(又叫硬绑定)(上下文调用模式,想让this指向谁,this就指向谁)
硬绑定:call apply bind
function test() { console.log(this.message); } let obj1 = { message: "你好世界123" } let obj2 = { message: "你好世界456" } test.bind(obj1)() // "你好世界123" test.bind(obj2)() // "你好世界456"
new 绑定(构造函数模式)
在使用new创建对象时会进行this的绑定
当使用new调用构造函数时,会创建一个新的对象并将该对象绑定到构造函数中的this上
function Greeting(message) { this.message = message; } var obj = new Greeting("hello,world") obj.message // "hello,world"
箭头函数中的this指向
箭头函数不同于传统函数,它没有属于自己的this
它所谓的this是,捕获其外层上下文中的this值作为自己的this值
并且箭头函数没有属于自己的this,它是不能被new调用
我们可以通过Babel转换前后的代码来清晰的理解箭头函数
// 转换前的 ES6 代码 const obj = { test() { return () => { console.log(this === obj) } } }
// 转换后的 ES5 代码 var obj = { test: function getArrow() { var that = this return function () { console.log(that === obj) } } }
这里我们看到,箭头函数中的this就是它上层上下文函数中的this

浙公网安备 33010602011771号