zoukankan      html  css  js  c++  java
  • this关键字

    推荐博客:https://www.cnblogs.com/huaxili/p/5407559.html

    this是JavaScript的一个关键字,表示的不是对象本身,而是指被调用的上文。

    主要用于以下四种环境:

    1.直接调用,表示的是全局对象,window

    2.作为对象方法被调用,表示的是该对象

    3.作为构造函数被调用,表示的是创建的实例

    4.可以使用apply(),call()改变this的表示对象,第一个参数就是this

    1.直接调用,表示的是全局对象,window:

    调用函数的结果是1,即this指的是全局对象,window,所以count值为全局变量的值

    var count = 1;
    function func(){
        console.log(this.count);
    }
    func();     //1    

    2.作为对象方法被调用,表示的是该对象:

    func()方法作为对象的方法被调用,此时this表示的被调用的对象obj,所以count值为obj对象中的值count,若是对象obj中没有count属性,则为undefined

    var count = 1;
    function func(){
      console.log(this.count);
    }
    
    var obj = {};
    obj.count = 2;
    obj.show = func;
    
    obj.show();     //2

    3.作为构造函数被调用,表示的是创建的实例:

    func()作为构造函数,创建了他的实例,此时this表示的是创建的实例Func

    var count = 1;
    function func(){
      this.count = 2;
    }
    
    var Func = new func();
    console.log(count);             //1
    console.log(Func.count);     //2    

    4.可以使用apply(),call()改变this的表示对象,第一个参数就是this:

    apply()是函数对象的一个方法,它的作用是改变函数的调用对象(实则是将某某对象的某个方法放到另一个好基友对象那里去执行),它的第一个参数就表示改变后的调用这个函数的对象。因此,this指的就是这第一个参数。同call()

    可以使用apply()或是call()来改变this指向。此时this表示的是obj对象

    var count = 1;
    function func(){
        console.log(this.count);
    }
    
    var obj = {};
    obj.count = 2;
    
    func.call();        //1 
    func.call(obj);     //2

    5.嵌套函数作用域中的this:

    嵌套函数被调用时并没有继承被嵌套函数的this引用,在嵌套函数被调用时,this指向全局对象。在有些应用中,我们需要在嵌套函数中读取调用被嵌套函数的对象的属性,此时可以声明一个局部变量保存this引用,

    var count = 1;
    function func(){
      console.log(this.count);
    
      function func2(){
        console.log(this.count);
      }
    
      func2();
    }
    
    var obj = {};
    obj.count = 2;
    obj.show = func;
    
    obj.show();     //2,1

    此时,嵌套函数与被嵌套函数中的this都表示了obj对象。

    var count = 1;
    function func(){
      console.log(this.count);
    
      var self = this;
      function func2(){
        console.log(self.count);
      }
    
      func2();
    }
    
    var obj = {};
    obj.count = 2;
    obj.show = func;
    
    obj.show();     //2,2
  • 相关阅读:
    SendCloud邮件中为什么会显示代发
    话说TP框架里的Vendor这目录是干什么用的啊?类库扩展thinkphp3.1版本
    中国天气网-天气预报接口api
    微信公众号tp3.2放进Model无效,几种实例化的方法试过,还是提示无法提供服务
    dede标签:定义文件夹
    DEDECMS中的几个常见的自定义常量DEDEMEMBER等位置
    dede添加会员功能听语音
    ExecuteNonQuery()返回值
    第十七节:织梦做自定义表单在线预约的方法
    MONGODB的内部构造 FROM 《MONGODB THE DEFINITIVE GUIDE》
  • 原文地址:https://www.cnblogs.com/5201314m/p/10298944.html
Copyright © 2011-2022 走看看