this指向(链接上下文)···有图解

#this:数组

this(执行上下文): 【this的指向问题,个人看法就是三个字“肇事者”,状况有不少种,可是咱们要拨开迷雾,找到‘凶手’】。 如今你就是没有小兰的柯南,真想只有一个!app

1.在全局做用域:this就是window。

2.在函数内,this是谁,取决于函数的调用方式:
    2.1 若是函数是直接调用的,函数内的this就是window
    2.2若是函数是以对象的方法调用的(如:xxx.func()),函数内的this就是方法前的对象(前例中的xxx).
    [谁调用函数就指向谁,就像是蚊子叮了你,你总要找到那个肇事者]
***注意***
    1)每一个函数都有本身的this指向。因此进入函数后,this随着函数的调用方式变化,this也是变化的。并且this的指向,不取决于定义在哪,而是取决于函数是谁调用的。
    
    var fullname = "Iron man";
    【喜欢钢铁侠的请你点个赞】
    function hello(str) {
        console.log(`我就是${this.fullname},${str}`)
    }
    hello("钢铁侠最cool")       //函数内的this就是window
    
    var p = {
        fullname:"Captain America",
        hello:function() {
         console.log(`你好,我叫${this.fullname}`)
        }
    }
    p.hello();
    
    var hi = p.hello()  //全局定义了一个变量hi,将p对象的属性hello的值给了hi
    hi()    //this是window【不要被误导,这是直接调用】
    
    p.hi = hello
    p.hi("world")   //this就是p
    
    
    3.强行改变this的指向【俗称掰弯this,难道这说明之前this是直的?】
    call是函数对象本身方法
    hello.apply(this想指向的对象,[传给hello的参数们])
    hello.call(this指向的对象,传给hello的第一个参数,传给hello的第二个参数......)
    ***注意***
        调用函数的方法apply与call时,参数是立刻执行的。另外apply第二个参数是数组。
        bind调用时,函数是不会立马执行的,它比较调皮,返回的是一个新函数,新函数的this,就是你刚才bind的对象。
            好比说:
            var newFunction = hello.bind(this指向的对象);
            【新函数内,this就是bind的参数】
    //调用全局的hello,让hello内的this指向p
    hello.apply(p,["我是一个数组"])
    hello.call(p,"我不是数组")
    var newHello = hello.bind(p)
    newHello("但愿你们喜欢个人博客")
    
    4.构造函数内的this,在new时,构造函数内的this,指向新建立的对象,new前面的那个“帅哥”。
    
    5.箭头函数,没有本身的this。若是在箭头函数中出现了this,会像父级做用域找this,知道找到为止。
    (箭头函数就是一个“变种人”,并且不是金刚狼的那种。)
复制代码

相关文章
相关标签/搜索