zoukankan      html  css  js  c++  java
  • this的指向问题

    一、四种指向

    1. 全局环境 -> window

    2.对象环境 -> 对象

    3. 构造函数环境 -> 实例对象

    4. 事件对象 -> 调用者

    总结:谁调用指向谁

    二、两种改变指向的方式

    1. call/apply 方式

    2. 定义局部变量的方式:var that = this;

    三、特例

    1. 如果返回值是一个对象,那么this指向的就是那个返回的对象,如果返回值不是一个对象那么this还是指向函数的实例。

    function fn()  
    {  
        this.user = '追梦子';  
        return {};  // function(){}/[]/Date/Array
    }
    var a = new fn;  
    console.log(a.user); //undefined

    fn 里 return functio(){} 时,打印同样为 undefined

    function fn()  
    {  
        this.user = '追梦子';  
        return 1;  // 0/true/false/undefined/null/
    }
    var a = new fn;  
    console.log(a.user); //追梦子

    只要不是一个对象(引用类型),都会正常返回
    注:虽然 null 也是对象,但是 null 是个特例

    2. //Array[index](); 等同于数组对象直接打点调用函数

    function foo(){
      console.log(this.length);
    }
    var arr = [foo,2,3,4];
    arr[0](); //4

    3.
    setInterval(obj.fun,1000);obj.fun中的this一定指向window。因为setInterval(),setTimeout()相当于window.setInterval(),还是window调用

    var a = 12;

    var obj = {
      a : 1,

      fun : function(){

        console.log(this.a);

      }

    }

    setInterval(obj.fun, 1000);  // 12


    setInterval(obj.fun(), 1000);  // 1  注:会停止定时任务,且运行后立即打印,不会等到1s后才执行打印

    //让obj.fun中的this指向obj,需要写在function()中 
    setInterval(function(){ 
      obj.fun();
    },1000);  // 1




  • 相关阅读:
    [洛谷P3674]小清新人渣的本愿
    [洛谷P2698][USACO12MAR]花盆Flowerpot
    [洛谷P4329][COCI2006-2007#1] Bond
    [洛谷P3203][HNOI2010]弹飞绵羊
    [洛谷P1407][国家集训队]稳定婚姻
    [洛谷P3388]【模板】割点(割顶)
    TX2_安装view_team
    tx2的一些系统命令
    tensorflow-cnnn-mnist
    mnist数据集tensorflow实现
  • 原文地址:https://www.cnblogs.com/s-qiu/p/9795373.html
Copyright © 2011-2022 走看看