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

  • 相关阅读:
    Scala学习笔记(八):Scala的层级
    Scala学习笔记(七):闭包
    Scala学习笔记(六):函数
    Struts 2(八):文件上传
    Struts 2(七):国际化
    Struts 2(五):输入校验 & 校验框架
    Struts 2(四):类型转换
    Struts 2(三):示例→基于Struts 2的用户注册模块
    Struts 2(二):使用Struts2
    Struts 2(一):初识Struts
  • 原文地址:https://www.cnblogs.com/heben/p/8989641.html
Copyright © 2011-2022 走看看