天天看点

javascript学习笔记——this对象

this对象是在运行时基于函数的执行环境绑定的。

在全局函数中,this等于window;当函数别作为某个对象的方法调用时,this等于该对象。

this的几个常用方法:

1、全局性调用

此时this对象此时代表全局对象global。示例如下:

var x=;
    function getValue(){
        alert(this.x);
    }
    getValue();//1
           

如果此时this不是等于global则找不到this.x的值。

var x=;
    function getValue(){
        this.x=;
    }
    getValue();
    alert(this.x);//2
           

如果此时this不是等于global,则结果应该为1.

2、 作为对象方法调用

this等于该对象。示例如下:

var x=;
    function getValue(){
        alert(this.x);
    }
    var o={};
    o.x=;
    o.method=getValue;
    o.method();//2
           

3、 作为构造函数调用

此时this等于该构造函数生成的新对象。【构造函数:通过这个函数生成一个新对象】,示例如下:

var x=;
    function setValue(){
        this.x=;
    }
    var o=new setValue();
    alert(o.x);//2
           

4、 apply调用和call调用

apply()是函数对象的一个方法,作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象。this指的是第一个参数。实例如下:

var x=;
    function getValue(){
        alert(this.x);
    }
    var o={};
    o.x=;
    o.method=getValue;
    o.method.apply();//1
    o.method.apply(o);//2
           

当apply()的第一个参数为空时,默认调用全局对象,此时this等于global。当apply()的第一个参数为o时,this指向这个第一个参数o。

call()也是函数对象的一个方法,也可以改变函数的调用对象。【和apply()的区别在于call()是调用一个对象的方法,apply()是应用某一对象的方法】它的第一个参数就表示改变后的调用这个函数的对象。this指的是第一个参数。如果没有第一个参数,则默认为global。实例如下:

var x=;
    function getValue(){
        alert(this.x);
    }
    var o={};
    o.x=;
    o.method=getValue;
    o.method.call();//1
    o.method.call(o);//2
           

当call()的第一个参数为空时,默认调用全局对象,此时this等于global。当call()的第一个参数为o时,this指向这个第一个参数o。

匿名函数的执行环境具有全局性,因此其this对象通常指向window

先看个例子:

var name="the window";
var object={
        name:" my object",
        getNameFunc:function(){
            return function(){
                return this.name;
            }
        }
    };
    alert(object.getNameFunc()());//the window
           

匿名函数中,提供给该函数执行环境关联的this的值实际上时null,但在ES3下,这种情况下的都把global当做this。

关于this为什么指向window,一开始有点疑问,后于知乎上找到答案。此处附上知乎地址:http://www.zhihu.com/question/21958425

参考自阮一峰《Javascript的this用法》http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html

参考《javascript高级程序(第三版)》

参考http://www.zhihu.com/question/21958425

继续阅读