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

    本文在于理解JavaScript this 关键字,转载自https://blog.csdn.net/ancc4/article/details/38461121

    零:从基本的例子开始


    var value = 1;  
    var myObject = {  
        value: 0,  
        get: function(){  
           console.log(this.value);  
        }  
    };  
      
    myObject.get();  

    将上面的代码保存为test.js ,执行node test.js,输出 0。可以看出this指向的是myObject而不是全局,否则应该输出1,这一点看起来很自然。

    但是下面这个例子看起来就不自然了

    myObject = {"name" : "me"};  
    name = 'all';  
    myObject.double = function(){  
        var get = function(){  
            console.log(this.name);  
        };  
        get();  
    };  
    myObject.double();  

    输出的结果是all而不是me

    这是因为:

      当一个函数被保存为对象的一个属性的时候,我们称之为一个方法。当一个方法被调用的时候,this被绑定到这个对象;

      当一个函数并非一个对象的属性时,它是被当作一个函数来调用。

    壹:var self = this


    对于上面提到的这种特性,可以用一种方法来解决:在方法定义一个变量并给它赋值为this,那么内部函数就可以通过那个变量访问this。

    myObject = {"name" : "me"};  
    name = 'all';  
    myObject.double = function(){  
        var self = this;  
        var get = function(){  
            console.log(self.name);  
        };  
        get();  
    };  
    myObject.double();  

    这样就能输出me了

    贰:bind(this)


    还可以用另外一种方法来解决

    myObject = {"name" : "me"};  
    name = 'all';  
    myObject.double = function(){  
        var get = function(){  
            console.log(this.name);  
        }.bind(this);  
        get();  
    };  
    myObject.double();  

    这样也能输出me了

    其他:


    ES6 模块之中,顶层的this指向undefined,即不应该在顶层代码使用this

  • 相关阅读:
    【Nginx+Tomcat】高性能负载均衡的Tomcat集群
    【JS-Excel】使用JS导出表格数据、附带解决科学计数法等问题
    【Util】日期工具类总结
    【SpringMVC】url映射传参
    【Linux+Windows】Linux,Windows打包发布到Tomcat并修改映射的ip地址
    【Spring】解决返回json乱码问题
    【API】高德地图API JS实现获取坐标和回显点标记
    ELK-Python(二)
    ELK-Python(一)
    zookeeper集群
  • 原文地址:https://www.cnblogs.com/heben/p/8989641.html
Copyright © 2011-2022 走看看