• JavaScript中this的用法


    this的使用环境有以下几种

    1、全局性函数调用

      我们通常在全局内声明和调用的函数都叫全局函数。在全局函数中,this等于window。

    例如下面一段代码中,运行结果应该是0。因为this调用的是全局变量,等同于window。

    var x = 1;
    
    function test() {
        this.x = 0;
        console.log(this.x); //0
    }
    test();

    2、作为对象方法的调用

    所谓对象方法,指的是对象中值为函数的属性。当函数不是全局调用,而是作为某个对象的方法调用时,this等于那个对象。

    例如下面这段代码,func是作为对象o的方法,所以func的调用中this指向对象o。

    var x = 1;
    
    function test() {
        console.log(this.x);
    }
    var o = {};
    o.x = 0;
    o.func = test;
    o.func(); //0

    3、作为匿名函数被返回的时候

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

    例如下面这段代码,由于getNameFunc返回的是一个匿名函数,所以返回函数的this指向window。

    var name = "The Window";
    var object = {
        name: "My Object",
        getNameFunc: function() {
            return function() {
                return this.name;
            }
        }
    };
    console.log(object.getNameFunc()()); //"The Window"

    4、作为构造函数的调用

    所谓构造函数,就是通过对这个函数使用new操作符来生成一个新对象,而this就是指这个新对象。

    例如下面这段代码,由于func是使用new操作符来构造的一个对象,所以this指func这个对象。

    var x=1;
    function func(){
        this.x=2;
    }
    var func=new func();
    console.log(func.x);//2
    console.log(x);//1

    5、使用apply调用函数的时候

    使用function.apply(obj,args)调用函数的时候,可以接受两个参数obj和args,其中obj用来代替function类里的this对象,所以此时函数内的this指的是apply的第一个参数。

    例如下面这段代码,如果apply没有参数,则默认调用全局对象,因此这时的运行结果为1,证明this指的是全局对象。如果apply有参数,则this指向的是第一个参数所指的对像。

    var x = 1;
    
    function test() {
        console.log(this.x);
    }
    var o = {};
    o.x = 2;
    o.func = test;
    o.func.apply();  //1
    o.func.apply(o); //2

    随着函数使用场合的不同,this的值会发生变化,但是有一个总的原则,那就是this指的是调用函数的那个对象。

  • 相关阅读:
    url 转码 urlencode和 urldecode
    通过启动函数定位main()函数
    关于溢出的总结1
    http://ctf.bugku.com/challenges#Mountain%20climbing:bugku--Mountain-Climbing
    http://ctf.bugku.com/challenges#love:bugku--love
    http://ctf.bugku.com/challenges#%E9%80%86%E5%90%91%E5%85%A5%E9%97%A8:bugku--逆向入门
    http://ctf.bugku.com/challenges#Timer(%E9%98%BF%E9%87%8CCTF):Bugku——Timer(阿里CTF)
    http://ctf.bugku.com/challenges#%E6%B8%B8%E6%88%8F%E8%BF%87%E5%85%B3--游戏过关
    填坑专记-手脱FSG壳

  • 原文地址:https://www.cnblogs.com/meng9688/p/6815259.html
Copyright © 2020-2023  润新知