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

  • 相关阅读:
    sublime text 3 package control
    互联网协议入门
    java String.split()函数的用法分析
    Java 路径
    matplotlib安装问题
    简单工程使用sbt公共库(sbt-assembly)
    通俗理解LDA主题模型
    基于协同过滤,NMF和Baseline的推荐算法
    贝叶斯集锦套装
    [转]
  • 原文地址:https://www.cnblogs.com/heben/p/8989641.html
Copyright © 2011-2022 走看看