5

javascript中的this

译:理解并掌握 JavaScript 中 this 的用法

关键

只有一个对象调用了包含this函数时,this才被赋值,并且所赋的值只依赖于调用了包含this函数的对象

使用原则

  1. this永远指向一个对象,并且拥有着个对象的值

  2. 在严格模式下,在全局作用域中和匿名函数中,this指向undefined

  3. this在一个函数内出现的时候,this指向调用这个函数的对象

易错场景

  1. 包含this的方法被当作回调函数

        $("button").click(callback);
    

    期待this指向:包含该方法的对象

    实际this指向:调用了回调函数的对象

    解决办法:bind

  2. this出现在闭包内

       
           ...
        example: function(){
            [1,2,3,4].forEach(function(item){
               this.test(item)
           })
       }
           ...
    

    期待this指向:外层函数的this指向

    实际this指向:undefined或者全局对象

    解决办法:使用另外一个变量保存this

  3. 把包含this的方法赋给一个变量

       var user = {
           name: 'hhh',
           sayName: function(){
               console.log(this.name);
           }
       }
       var test = user.sayName;
       test();//  全局变量的this
    

    期待this指向:包含该方法的对象

    实际this指向:包含该变量的对象

    解决办法:bind

  4. 借用包含this的方法

    var user1 = {
        name: 'hhh',
        sayName: function(){
            console.log(this.name);
        }
    }    
    var user2 = {
        name: 'ggg'
    }
    user2.ggg = user1.sayName();//

期待`this`指向:借用`this`方法的对象

实际`this`指向:包含该`this`方法的对象

解决办法:`apply`

this的使用是一个经常容易出错的地方,但是只要把握一个原则,即

this总是指向调用包含this的方法的对象


heeefei
168 声望12 粉丝