阅读 62

this关键字

this关键字:表示当前对象(与使用场景有关)

this使用的几种场景

  • 在普通函数中

    • this指向window对象

    function fn1() {         console.log(this);//指向window         this.a = 10     } 复制代码

  • 在对象方法中

    • this指向调用方法的对象

    let obj = {             a: 1,             b: 2,             fn: function () {                 console.log('对象方法中的this', this);//执行obj             }         }         // obj.fn() 复制代码

  • 在定时器中

    • 指向window对象

    <button>this</button>     setTimeout(() => {         console.log('定时器', this); //指向window     }, 1000); 复制代码

  • 在事件处理函数中

    • 指向事件源

     let btn =document.querySelector('button')     btn.onclick=()=>{         console.log(this);//指向事件源btn     } 复制代码

  • 自执行函数

    • 指向window对象

    let fn2 =(function () {         console.log(this);//指向window     })() 复制代码

改变this指向

  • 改变this指向可以通过三种方式,分别是call,apply,bind

call

var obj = {     name: 'jack',     age: 23 } function fn(a, b) {     this.name = a     this.age = b     console.log(this);//{name: '小明', age: 20} } fn.call(obj, '小明', 20)//指向obj 复制代码

apply

var obj = {     name: 'jack',     age: 23 } function fn(a, b) {     this.name = a     this.age = b     console.log(this);//{name: '小明', age: 20} } fn.apply(obj, ['小明', 20])//指向obj 复制代码

bind 会返回一个新函数

var obj = {     name: 'jack',     age: 23 } function fn(a, b) {     this.name = a     this.age = b     console.log(this);//{name: '小明', age: 20} } var newFn = fn.bind(obj, '小明', 20)//指向obj newFn() 复制代码

call、apply、bind 异同点

  • call和bind传参方式相同

    • call和bind是直接传参

  • call和apply传参方式不同

    • apply 传参是传入一个数组

  • call和apply不会返回一个新函数,bind会返回一个新的函数,通过调用这个函数才能实现相应的功能

箭头函数中的this问题

  • 箭头函数中没有this,里面的this指向上下文(调用对象所在的对象)

总结

  • this的指向遵从谁调用就指向谁的原则


作者:小熊9号
链接:https://juejin.cn/post/7018881326929412103


文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐