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

  • 相关阅读:
    新人优惠的风险
    Linux服务器记录并查询历史操作记录
    斜率比截距重要
    专访李果:初生牛犊不怕虎的移动创业者
    iPhone开发视频教程 ObjectiveC部分 (51课时)
    珍藏40个android应用源码分享
    iPhone开发教程 UI基础课程(58课时)
    ios源码分享之动画类
    史上最全的ios源码汇总。欢迎收藏
    Android开发教程汇总
  • 原文地址:https://www.cnblogs.com/heben/p/8989641.html
Copyright © 2011-2022 走看看