this

作者: 王瓷锤 | 来源:发表于2019-12-20 19:00 被阅读0次

    1. 作为函数直接被调用时 this 绑定到全局对象,在浏览器中,该全局对象为window
    2. 函数嵌套产生的内部函数的 this不是父函数,仍然是全局变量
    3. setTimeout、setInterval:这两个方法执行的函数中的 this 也是全局变量,但是如果这两个方法中的函数是箭头函数,则 this 指向 setTimeout 上一级的 this
    4. 函数如果作为对象的方法调用,this 会绑定到该对象上,如果将该对象的方法赋给另一个变量,那么这个方法中的 this 就另当别论了
    var fn2 = obj1.fn;
    fn2() //函数中的this此时指向window
    
    1. DOM对象绑定事件时,this指向当前绑定对象(e.currentTarget),而在jQuery中如果使用事件代理,this 指向的是触发事件的元素(绑定元素的子元素)
    2. Function.prototype.bind:返回一个新函数,函数中的this指向传递给bind的第一个参数
    function fn(){
    var name='abc';
    console.log(this.name)
    }
    var obj = {name:'def'};
    var fn2 = fn.bind(obj);
    fn2() // 'def'
    
    1. call 具有与 bind 相似的用法,也是用来改变 this,它接受列表参数,不过call()后函数会立刻执行,第一个参数是想传入的数据值,为 arguments 格式,后面的参数为需要传递给函数的参数
    用法:.call(context,para1,para2...)
    var argsArr = Array.prototype.slice.call(arguments,0) 
    // 将数组的 slice 方法用在 arguments 上,使 arguments 转化为数组
    
    1. apply与 call 用法相似,它接受数组参数,让数组参数能够使用列表参数才能使用的方法
    用法:.apply(context,paraArray)
    Math.max(1,2,3,4) // 4;
    Math.max.apply(null,[1,2,3,4]) // 4
    
    1. 箭头函数中没有this,所以其内部的 this 指向它上一级的 this

    相关文章

      网友评论

          本文标题:this

          本文链接:https://www.haomeiwen.com/subject/tmyinctx.html