zoukankan      html  css  js  c++  java
  • javascript this指向

    this对象是什么:

      this对象是与运行时函数执行的上下文绑定的。这句话其实已经很好的解释了this对象,为我们确定this指明了方向!但是需要注意的是:由于javascript具有动态性(解释执行,当然也有简单的预编译过程),this对象只有运行时才能够确定!

    确定this对象的方法:

    当函数为全局函数时,this指向window;当函数作为某个对象的方法被调用时,this指向那个对象。特别需要注意的是,在非严格模式下匿名函数的执行上下文具有全局性,其中的this指向window,而严格模式this为空。

    案例:

    看不懂没有关系,下面讲解一下实例:

    1.先来点简单的

    /*全局当中的this*/
    console.log(this); //window
    /*全局函数中的this*/
    function fn(){  
        console.log(this); //window
    }
    fn();
    /*对象当中方法的this*/
    var obj = {
        name : '复读机',
        getThis : function(){
            console.log(this); 
        }
    }
    obj.getThis()//obj 此函数作为obj的方法被调用
    var getThis1 = obj.getThis;
    getThis1();//window 此函数不是作为obj方法被调用,可以看做是全局函数

    2.闭包与this

    /*闭包与this*/
    var obj = {
        name : '复读机',
        getThis : function(){
            return function(){
                console.log(this); //window
            }
        }
    }
    obj.getThis()();

    还是简单解释一下:在这个例子中this的指向为运行时this所在的执行上下文,很明显this的上下文为一个匿名函数,这个匿名函数不是属于obj的方法,它具有全局性,所以this指向window

    3.类与this

    /*类与this*/
    function CreateDog(name,age){
        this.name = name;
        this.age = age;
        console.log(this); //指向实例
    }
    CreateDog.prototype.sayThis = function(){
        console.log(this); //指向实例
    }
    var dog = new CreateDog("xiaohei",1);
    dog.sayThis();

    很多人误认为this指向类,然而this指向实例,这一点是毋庸置疑滴!

    最后,关于this的有很多,需要在实践中慢慢体会!

  • 相关阅读:
    推销
    5132. 颜色交替的最短路径
    5130. 等价多米诺骨牌对的数量
    @babel/plugin-transform-runtime和@babel/preset-env的区别
    5128. 最深叶节点的最近公共祖先(二叉树)
    1094. 拼车
    1109. 航班预订统计(数组)
    5129. 表现良好的最长时间段(数组)
    path.resove 和 path.join
    【原生】 call、apply、bind 的基本使用方法,已经解析了某些源码
  • 原文地址:https://www.cnblogs.com/wang-jiang/p/4450626.html
Copyright © 2011-2022 走看看