zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    大数据量查询优化——数据库设计、SQL语句、JAVA编码
    vue项目全局修改字体
    vue项目使用iframe嵌入另一个vue项目的页面
    vue中解决chrome浏览器自动播放音频 和MP3语音打包到线上
    java的string方法使用
    java使用EasyExcel操作Excel
    vue中,使用 es6的 ` 符号给字符串之间换行
    vue显示后端传递的图片流
    最全vue的vue-amap使用高德地图插件画多边形范围
    vue+elementUI实现 分页表格的单选或者多选、及禁止部分选择
  • 原文地址:https://www.cnblogs.com/wpp12345/p/5829999.html
Copyright © 2011-2022 走看看