简单了解this指向,轻松过面试

92 阅读1分钟

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>