• this指向


    理解javascript中this的指向

    正常情况下,this指向最终调用它的对象。(不做this指向)

    function a() {
        console.log(this);
    }
    a();        // window对象

    上面代码相当于

    function a() {
        console.log(this);
    }
    window.a();        // window对象

    this的执行,是由window对象的a方法调用的,所以this指向window


    var a = {
        'print': function () {
            console.log(this);
        }
    }
    a.print();        // a对象
    window.a.print();        // a对象

    this是由a对象的print方法调用的,a对象虽然属于window对象,但this指向最终调用它的对象,所以this指向a。


    var a = {
        'b': {
            'print': function() {
                console.log(this);
            }
        }
    }
    a.b.print();        // b对象

    这个就不用解释了。


    function b() {
        console.log(this);
    }
    var a = {
        'print': function () {
            b();        // 此处相当于window.b();
        }
    }
    a.print();        // window对象

    这个例子中,a对象只是调用的print方法,最终调用this的是window对象的b方法。


    function b() {
        console.log(this);
    }
    var a = {
        'print': b
    }
    a.print();        // a对象

    这个例子中,将b方法给了a对象的print方法,所以this是由a.print方法调用的。


    若不太理解,可看成下面的

    var a = {
        'print': function b() {
            console.log(this);
        }
    }
    a.print();        // a对象

     

    这样就很容易理解了。


    var a = {
        'print': function () {
            console.log(this);
        }
    }
    var b = a.print;
    b();            // window对象

    a.print只是一个函数,这个函数赋给b,再由b执行,而b属于window对象,最终调用this的就成window对象了。


    闭包的this指向问题


    var a = {
        'print': function() {
        
            console.log(this);        // a对象
            
            (function () {
                console.log(this);    // window对象
            }()) ;
            
        }
    }
    a.print();

    在闭包中this指向window对象。


    var a = {
        'print': function () {
            setTimeout(function() {
                console.log(this);
            }, 500);
        }
    }
    a.print();        // window对象

    setTimeout & setInterval 中,延后执行的内容,this指向window。


    new关键字

    function A() {
        this.print = function () {
            console.log(this);
        }
    }
    var a = new A();
    a.print();        // a对象

    new关键字会创建一个空的对象,然后会自动调用一个函数apply方法,将this指向这个空对象,这样的话函数内部的this就会被这个空的对象替代。


    通过new关键字创建的对象,若构造函数有返回值,且返回值为对象,则创建的对象为返回值,返回值不为对象,创建的对象为构造的对象,更多请看new关键字


    严格模式中默认this不在指向window,而是undefined。


    更多关于this,改变this指向




  • 相关阅读:
    python 函数2
    python 函数
    python 中string格式化
    python中的集合
    值&&引用传递&&序列化
    线程&&进程
    c#委托
    .net框架介绍
    类的定义
    ef中关于数据库中int为null问题
  • 原文地址:https://www.cnblogs.com/seeks/p/10176976.html
Copyright © 2020-2023  润新知