zoukankan      html  css  js  c++  java
  • 怎样解决多层this指向全局对象window的问题

    如下所示, 得到的结果里面, 第二个this指向的是window这个全局对象而非f2, 原因就是多层this造成的指向不明引起的.

    var a = {
        f1: function(){
            console.log(this);
            var f2 = function(){
                console.log(this);
            };
            f2();
        }
    };
    
    a.f1(); 
    // Object
    // Object

    上面这段代码的实际运行效果其实是这样的: 

    var test = function(){
        console.log(this);
    }
    
    var a = {
        f1: function(){
            console.log(this);
            var f2 = test;
            f2();
        }
    };
    
    a.f1(); 
    // Object
    // Object

    但我们需要的效果是他指向a对象, 而不是window, 解决方法是通过另一个变量将this固定住:

    var a = {
        f1: function(){
            console.log(this);
            var self = this;
            var f2 = function(){
                console.log(self);
            };
            f2();
        }
    };
    
    a.f1(); 
    // Object
    // Object

    这里使用了一个变量: self, 将a对象的this固定住, 利用函数作用域可以访问父级作用域内变量这一特点, 实现this的传递.

  • 相关阅读:
    Git 常用命令集合
    PHP CURL
    Helm安装Dashboard
    使用helm 部署Nginx
    Helm v3部署和使用
    K8s
    Linux
    CentOS下 Docker、Docker Compose 的安装教程(附详细步骤)
    Passwordless SSH Login
    秒杀业务的设计
  • 原文地址:https://www.cnblogs.com/aisowe/p/11660388.html
Copyright © 2011-2022 走看看