• 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

  • 相关阅读:
    原理Lambda表达式
    关于Web.config的debug和release.config文件
    利用GeoIP数据库及API进行地理定位查询 Java
    JSONP跨域的原理解析
    如何处理JSON中的特殊字符
    IIS下防止mdb数据库被下载的实现方法
    点击文字选中radio
    关于微信40029错误
    nopcommerce的WidgetZones
    js判断移动终端(手机浏览器)
  • 原文地址:https://www.cnblogs.com/heben/p/8989641.html
Copyright © 2020-2023  润新知