zoukankan      html  css  js  c++  java
  • 闭包中的 this 对象

    关于this对象

      在闭包中使用this对象也可能会导致一些问题。this对象是在运行时基于函数的执行环境绑定的:在全局函数中,this等于window,

     function createFunction(){   alert(this); }; createFunction(); // window 

      而当函数被作为某个对象的方法调用时,this等于那个对象。不过,匿名函数的执行环节具有全局性,因此其this对象通常指向 window。

      但有时候由于编写闭包的方式不同,这一点可能不会那么明显。

    var name = "The Window";
      var object = {
        name:"My Object",
        getNameFunc:function(){
          return function(){
            return this.name;
          };
        }
    }
    alert(object.getNameFunc()()); // "This Window 非严格模式下"

    上面代码先创建了一个全局变量 name ,又创建了一个包含 name 属性的对象。 这个对象还包含一个方法--- getNameFunc(),它返回一个匿名函数,而匿名函数又返回 this.name。 由于getNameFunction()返回一个函数,因此调用object.getNameFunc()(),就会立即调用它返回的函数,结果就是返回一个字符串。然而,这个例子返回的字符串是"The Window" 既全局 name 变量的值。

    为什么匿名函数没有取得其包含作用域(外部作用域)的this对象尼?

    <1> 前面提到过,函数执行时活动对象自动会保存两个值,一个是 this 与 arguments . 内部函数搜索这两个值,只会搜索到其变量对象为止。因此永远不可能直接访问外部
    函数中的这两个变量。 不过这可以使用一个变量来保存 this对象,这样就可以访问了 如下

    var name = "The Window";
    var object = {
      name:"My Object",
      getNameFunc:function(){
        var _this = this;
        return function(){
          return _this.name;
        };
      }
    }
    alert(object.getNameFunc()()); // "My Window 非严格模式下"

    上述代码中 _this 变量来保存,而在定义闭包之后,闭包也可以访问这个变量,因为它是我们在包含函数中特意声明的一个变量。
    即使返回后调用,其_this任然引用着 object, 所以调用 object.getNameFunc()()就返回了“My Object” 如下图

  • 相关阅读:
    如何实现分页功能
    学习Python的心路历程
    Python基础---协程
    Python基础---线程
    Python基础---python中的进程操作
    Python基础---进程相关基础
    Python基础---并发编程(操作系统的发展史)
    Python基础---网络编程3
    Python基础---网络编程2
    Python基础---面向对象3
  • 原文地址:https://www.cnblogs.com/czhyuwj/p/5636068.html
Copyright © 2011-2022 走看看