看透JavaScript:原理、方法与实践
上QQ阅读APP看书,第一时间看更新

7.2 this的含义

很多开发者对JS中的this理解得不是很清楚,很多时候会因为不正确地使用this而造成不必要的错误。下面我们就来给大家介绍JS中的this。

要正确理解this首先要将我们前面学习过的三种子类型区分清楚。这三种子类型是不可以相互调用的,只有在区分清楚这三种子类型之后才可能正确理解this的含义。区分清楚三种子类型之后再理解this就非常简单了,只需要记住一句话就可以了,那就是“谁直接调用方法this就指向谁”。也就是说方法的点前面的对象就是this,只要记住这一原则就不会对this的使用产生错误了。我们来看下面的例子。

    var color = "red";
    function Obj(){
        var color = "black";
    }
    Obj.color = "green";
    Obj.prototype.logColor = function(){
        console.log(this.color);
    }
    var o = new Obj();
    o.color = "blue";
    o.logColor();             //blue

这个例子中一共有4个color,一个是全局变量,一个是Obj的局部变量,一个是Obj的属性,还有一个是Obj创建的实例对象o的属性。logColor方法是Obj的prototype中的方法属性,其中打印了this.color的值。在调用o.logColor()时,按照前面给大家介绍的原则很容易就可以判断出这里会使用实例对象o中的color属性,也就是blue,这是因为logColor方法是被o对象直接调用的。