函数类型function()中this指向的问题
规则1.在函数中直接使用,此时的this指向的是window
var name = '黎明'
function get(content){
var name = '郭富城'
console.log(content + this.name) // 输出为你好黎明
}
get('你好')
// 相当于 get.call(window, '你好')
规则2 :函数作为对象的方法被调用(谁调用我,我就指向谁)
var name = 李四
var person = {
name = '张三',
run: function(time){
console.log(this.name + '在跑步' + this.time + 'min就不行了') // 输出的是张三
}
}
person.run(30) // 指向对象本身
// 相当于 person.run.call(person, 30)
this扩展判断,判断下面分别打印出的结果
var name = 222
var a = {
name: 1111,
say: function() {
console.log(this.name) // 111111
}
}
var fun = a.say
fun() // 2222
a.say() // 1111
var b = {
name: 33333,
say: function(fun) {
fun()
}
}
b.say(a.say) // 222222
b.say = a.say
b.say() //333333
箭头函数中this指向的判断 ()=>{}
箭头函数的this是在定义函数的时候绑定的,而不是在执行的时候绑定
箭头函数中,this的指向的固定化,并不是因为箭头函数内部绑定有this的机制,实际是因为箭头函数没有 自己的this,导致内部的this指向外部的代码块的this
定义的时候绑定this
var x = 11
var obj = {
x: 22,
say: () => {
console.log(this.x) // 11
}
}
obj.say()
所谓定义的时候绑定就是this是继承自父执行上下文中的this,比如这里的监听函数中的this.x
箭头函数本身与say平级,以key.value的形式,也就是监听函数本身所在的对象为boj,而obj的父执行上下文就是window,因此this.x 实际上表示的是window.x 因此输出的是11
// 第二种情况,由于处于当前的函数内部所以此时的this就是指向obj对象
var obj = {
brith: 1990,
getAge: function() {
var b = this.brith; // 1990
var fn = () => new Date().getFullYear() - this.brith
// 向obj对象
return fn()
}
}
console.log('年龄', obj.getAge()) // 21