码迷,mamicode.com
首页 > Web开发 > 详细

js中的墙头草---this

时间:2014-10-10 19:56:05      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:javascript   this   

  在Java中,this永远都是‘忠贞’地指向当前类的实例。而在javascript中,this就没有“忠贞”了,this会随着执行环境的变化而变化,也就是说this永远执行执行环境所在的对象。

直接上代码:

代码一:

function test(){
    alert(this == window) 
}
test()

   通过运行代码发现结果为true,这是因为test方法的调用时在window环境,所以this指向了window。


接着看:

  使用对象字面量定义属性和方法,如下:

var obj = {
    property : "obj",
    fun : function(){
        alert(this == window);
        alert(this == obj);
    }
}
obj.fun();

运行下代码,结果为false,true。是什么原因捏?原因其实很简单,就是fun方法是通过obj对象调用的,所以this就指向了obj对象。

有什么问题吗?木有,`(*∩_∩*)′。咱们继续啊!

我们知道在一个方法中还可以返回一个新的方法,形式如下:

 var obj = {
    property : "obj",
    fun : function(){
        return function(){
            alert(this == obj);
            alert(this == window);
        }
    }
}
obj.fun()() 

我们把上面的代码稍稍改编了下,在fun方法中重新返回了一个方法。结果是怎么样?你猜到结果了吗?
正确的结果是false,true。我们来分析下,使用 obj.fun()返回的是一个方法,这时候是在全局环境中(window),所以this就指向了window。明白了吧。                                         到这里你是不是对js中的this有了大概的了解呢,稍等,还有一种情况,就是通过call和apply方法动态改变this的指向。
我们在这里只演示一个call的例子。

function test(){
    alert(this == window) 
    alert(this == obj);
}
var obj = {};
test.call(obj,null);

我们继续使用第一个例子。我们定义了一个空对象obj,我们的目的是想把test方法作为obj的一个方法来执行。大家可以执行下看看结果,看看结果是不是和第一个例子的结果不一致                   
好了,今天暂时介绍到这里,排版暂时有问以后改下,不影响结果。
有问题请留言,谢谢!

本文出自 “Eason's hcc” 博客,请务必保留此出处http://hcc0926.blog.51cto.com/172833/1562179

js中的墙头草---this

标签:javascript   this   

原文地址:http://hcc0926.blog.51cto.com/172833/1562179

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!