zoukankan      html  css  js  c++  java
  • JS的this(谁调用就指向谁)

    普通函数:

    .this(上下文对象)
    - 我们每次调用函数时,解析器都会将一个上下文对象作为隐含的参数传递进函数。
    使用this来引用上下文对象,根据函数的调用形式不同,this的值也不同。就是谁调用,this就是谁。
    - this的不同的情况:
    1.以函数的形式调用时,this是window
    2.以方法的形式调用时,this就是调用方法的对象
    3.以构造函数的形式调用时,this就是新创建的对象

    var name = "window:我好帅"
    function fun1(){
       console.log(this.name);
    }
    
    var obj = {
      name:"obj:我好帅",
      say:fun1
    }
    window.fun1();
    fun1();
    obj.say();

    //以工厂方式或者构造函数的形式调用时,this就是新创建的对象

    function create_obj(age,name){
        var obj = new Object();
        obj.name = name;
        obj.age = age;
        obj.say = function(){
        console.log(this.name);
        console.log(this.age);
        }
        return obj;
     }
     var obj1 = create_obj(18,"邮电大学");//构造函数创建对象
     obj1.say();
     

    运行结果:

     总结:哪个对象调用this,this就指向谁。

    所有全局变量,全局函数都是window这个对象的属性。

     箭头函数的this指向:

    this与它本身所在的位置有关,它在哪里就指向哪里。

    *************************************************************************************************************

    例子1:对象里面定义函数

    var obj1 = {
        fun () {
            console.log(this);
        }
    };
    var obj2 = {
        fun: function () {
            console.log(this);
        }
    }
    var obj3 = {
        fun: () => {
            console.log(this)
        }
    }
    obj1.fun();  //obj1
    obj2.fun();   //obj2
    obj3.fun();   //window

    讲解

      • fun () {}这是对象里面函数的简写跟,跟 fun: function(){}一样,两者的this指向都是最原始的,谁调用指向谁
      • () => {}箭头函数的this指向为 是他定义时的上一级作用域的this指向,也就是说箭头函数是在哪个作用域下定义的,他的this指向就是那个作用域的this指向
        例子如下
    var obj = {
        pro: {
            getPro: ()=>{
                console.log(this);
            }
        }
    }
      obj.pro.getPro()  //window

    箭头函数是在getPRo这里定义的,他上一级是一个pro对象,这不是作用域,所以上一级的作用域就是var obj ,也就是全局作用域window。

    例子2:对象里面定义普通函数,普通函数里面再嵌套箭头函数

    var obj = {
        say: function() {
            var f1 = ()=>{
                console.log("1111",this);   
            }
            f1();
        }
    }
    var o = obj.say;
    o();//输出window,o调用,所以this指向o所在的作用域,即全局作用域
    console.log("***************")
    obj.say()//输出say,say调用,this指向say当前作用域

    运行结果:

     例子2对照组:对象里面定义箭头函数,箭头函数再嵌套箭头函数:

    var obj = {
        say:()=>{
            var f1 = ()=>{
                console.log("1111",this);   
            }
            f1();
        }
    }
    var o = obj.say;
    o();//window
    console.log("***************")
    obj.say()//window

    运行结果:

    总结:

    1.普通函数谁调用,this就指向谁;

    2.箭头函数this,与箭头函数本身所在的位置有关,this指向的是上一级的非箭头函数所在的作用域。

    穷则独善其身,达则兼济天下……
  • 相关阅读:
    TLPI读书笔记第15章-文件属性2
    TLPI读书笔记第15章-文件属性1
    Java异常及错误
    10055
    4月。
    JavaScript三种方法获取地址栏参数的方法
    页面预加载loading动画,再载入内容
    什么是可串行化MVCC
    简化版扫雷详细解
    论unity中UI工具与GUI函数
  • 原文地址:https://www.cnblogs.com/hmy-666/p/14423678.html
Copyright © 2011-2022 走看看