this指向
this本质上是 指针操作
this的指针指向谁 this就是谁
就可以通过 this 操作谁
// 普通函数的this指向
情况1
this指向是 window对象
实际操作通用一般没啥用
声明式函数 赋值式函数 数组的forEach 定时器 延时器....
情况2
this指向是 事件源标签对象
在 事件处理函数中 this指向 是 事件源标签对象
也就是 绑定事件的标签对象
情况3
this指向是 数组/对象
存储在数组或者对象中的函数
this指向 是存储这个函数的 数组/对象
// 箭头函数的this指向
箭头函数 本身 没有this指向
箭头函数的this指向 是 父级程序的this指向
如果箭头函数没有父级程序 或者 父级程序没有this指向
箭头函数的this指向 是 window
改变this指向
<script>
/*
函数封装时 改变this指向
声明封装一个新的函数
新函数和原始函数完全相同
只是 this指向 不同
*/
function fun( a,b,c ){
console.log( this );
console.log( a,b,c );
}
fun( 100,200,300 );
const obj = { name:'张三' , age:18 , sex:'男' };
// 声明一个新函数
// 使用bind语法 声明一个新的函数
// 新的函数 代码程序内容 和 原始函数fun完全相同
// 只是 this指向 不同
// 声明一个新函数f1 新函数f1的程序代码和原始函数fun完全相同
// 只是this指向变成了 设定的对象obj
// 在声明封装新函数时 没有绑定原始函数的实参
const f1 = fun.bind( obj );
// 调用函数时 可以输入实参
f1( 'aaa' , 'bbb' , 'ccc' );
// 在声明封装函数时 绑定了原始函数的实参
const f2 = fun.bind( obj , '北京' , '上海' , '广州' );
// 直接调用函数 不用在输入实参了
f2();
// 绑定了实参 没办法再改变实参了
f2(300,400,500);
</script>