美文网首页
this this this

this this this

作者: xiaoxinwan | 来源:发表于2018-09-23 03:15 被阅读0次

    this的值到底是什么

    var obj = {
        foo: function(){
            console.log(this)
        }
    }
    var bar = obj.foo
    obj.foo() // 打印出的this是obj
    bar() //打印出的this是window
    

    想一下为什么它们的值不一样

    JS(ES5)有三种函数调用方式:

    function(p1, p2)
    obj.child.method(p1, p2)
    fn.call(context, p1, p2)
    

    将.call作为调用方式,可改写成

    function.call(undefined, p1, p2)  // this是window
    obj.child.method.call(obj.child, p1, p2)  // this是obj.child
    fn.call(context, p1, p2)  // this是context
    

    第一个原本是undefined,后因浏览器的规则变成window

    浏览器的规则:如果传入的context是null 或 undefined,那么window对象就是默认的context(严格模式下context为undefined)

    1. this就是call一个函数时,传入的第一个参数
    2. 假若函数不是call形式调用,将它转换成.call()

    this 关键字是为了在JS中加入动态作用域而作的努力。所谓动态作用域,就是说变量的作用范围,是根据函数调用的位置而定的。

    相关文章

      网友评论

          本文标题:this this this

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