- 普通函数的this指向在运行时确定
- 箭头函数的this指向在定义之后就已经确定
一、test()
普通模式下this指向全局,严格模式下this为undefined
1 2 3 4 5 6
| var a = 1 function test() { console.log(this) console.log(this.a) } test()
|
二、xx.test()
this绑定到函数调用者
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| var a = 1 function test() { console.log(this.a) } var obj = { a: 2, test, } obj.test()
var a = 1 function test() { console.log(this.a) } var obj = { a: 2, test, } var obj1 = { a: 3, obj, } obj1.obj.test()
var a = 1 function test() { console.log(this.a) } var obj = { a: 2, test, } var testCopy = obj.test testCopy()
var a = 1 function test() { console.log(this.a) } var obj = { a: 2, test, } setTimeout(obj.test)
|
三、test.call(xxx) / test.apply(xxx) / test.bind()
this指向arg
1 2 3 4 5 6 7 8 9 10 11
| var a = 1 function test() { console.log(this.a) } var obj = { a: 2, test, } var testCopy = obj.test // testCopy.call(obj) testCopy.apply(obj)
|
四、new test()
构造函数里的this指的就是将要被new出来的新对象
1 2 3 4 5 6
| var a = 1 function test(a) { this.a = a } var b = new test(2) console.log(b.a)
|
五、箭头函数 () => {}
this指向的是它的外层作用域this的指向
1 2 3 4 5 6 7 8 9
| var a = 1 var test = () => { console.log(this.a) } var obj = { a: 2, test, } obj.test()
|