当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

this关键字的作用范围

发表于: 2014-10-30   作者:dearls   来源:转载   浏览:
摘要: 一个function, 从语法的角度讲,既可以使用括号让其执行,也可以new它,比如 fucntion a(){} var b = a(); var c = new a(); 对 于c来说,a方法同样会执行,需要注意的是,如果a方法有return语句,那么b和c的值都是这个被return的东西;如果a方法根本没有任何 reutrn,那么b的值是undefined,对于c来说,a方法等同于最

一个function, 从语法的角度讲,既可以使用括号让其执行,也可以new它,比如

fucntion a(){}

var b = a();

var c = new a();

对 于c来说,a方法同样会执行,需要注意的是,如果a方法有return语句,那么b和c的值都是这个被return的东西;如果a方法根本没有任何 reutrn,那么b的值是undefined,对于c来说,a方法等同于最后会被默认加上一个retrun this,所以c会拿到一个对象。

 

再看另一个方法,

function a() {
    console.log(this);
    this.prototype.test = function(){
        console.log(this);
    }
    this.id=1;
}

如果直接用a()来运行它,等价于window.a();所以打印出来的this就是window,this.id也会给window添加一个id属性并赋值;prototype的那三行会给window对象添加一个叫做test的方法。

 

如果用var b = new a()来运行它,new会产生一个新的this,所以打印出来的就是一个空的a对象;

b.test()会让test方法执行,打印的是一个带有test方法的a对象。

 

---------------------------------------------------------

需要额外注意的是,JS在需要定义callback方法的时候,callback方法默认的执行域是window,所以callback中的this就是window。如果还想使用callback定义的时候的作用于,就要用一个变量来寄存当时的this,比如:

function a() {
    this.test = function(){
        var me = this;
        setTimeout(function(){
            console.log(me);
        },1000);
    }
}

this关键字的作用范围

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号