• javascript this


    最近看了很多人的微博,主要是“追梦子”的微博,总结了一下。希望大家多多指点。

    1. 没有new this的指向问题
     
    this的指向在函数创建的时候是决定不了的,在调用的时候才能决定,谁调用的就指向谁
    因为this只会指向它的上一级对象
    例一:
    function a(){
        var user = "追梦子";
        console.log(this.user); //undefined
        console.log(this); //Window
    }
    a();  // === window.a()
       var o = {
         user:"追梦子",
          fn:function(){
              console.log(this.user);  //追梦子
         console.log(this);  // Object{...}
          }
      }
      o.fn(); // ===window.o.fn()
     
    特殊情况:
    var o = {
        a:10,
        b:{
            a:12,
            fn:function(){
                console.log(this.a); //undefined
                console.log(this); //window
            }
        }
    }
    var j = o.b.fn;       //j并没有被调用
    j();                 // === window.j()
    2. new 构造方法
    function Fn(){
        this.user = "追梦子";
    }
    var a = new Fn();
    console.log(a.user); //追梦子
    用了new关键字就是创建一个对象实例,我们这里用变量a创建了一个Fn的实例(相当于复制了一份Fn到对象a里面),
    此时仅仅只是创建,并没有执行,而调用这个函数Fn的是对象a,那么this指向的自然是对象a
     

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

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

     

     

     

     

     

    在浏览器中setTimeout、setInterval和匿名函数执行时的当前对象是全局对象window
     
    apply用于改变函数执行时的当前对象,当无参数时,当前对象为window,有参数时当前对象为该参数
    var name = "window";
        
    var someone = {
        name: "Bob",
        showName: function(){
            alert(this.name);
        }
    };
    
    var other = {
        name: "Tom"
    };    
    
    someone.showName.apply();    //window
    someone.showName.apply(other);    //Tom
  • 相关阅读:
    Neo4j使用
    Neo4j安装
    textCNN原理
    一小时彻底搞懂RabbitMQ
    微服务配置中心 Apollo 源码解析——Admin 发送发布消息
    new jup在新一代中存在
    elasticsearch 之 深入探秘type底层数据结构
    Elasticsearch修改分词器以及自定义分词器
    ElasticSearch解决深度分页性能存在的问题使用scoll来解决
    elasticsearchBouncing Results问题
  • 原文地址:https://www.cnblogs.com/wpp12345/p/5829999.html
Copyright © 2020-2023  润新知