zoukankan      html  css  js  c++  java
  • 关于this

    一:全局环境中的this指的是window对象

    二:作为对象的方法调用

    当函数作为对象的方法被调用时,this指向该对象

    例子:

    三:作为普通方法调用

    当函数不作为对象的属性被调用,而是作为普通函数函数被调用,this指向全局对象,也就是window

    例子1:

    此时this是指向window对象。

    如上图运行结果可以看出,在函数内部定义变量,未使用var 声明,则指向全局变量。可以对比结果

      

    例子2:

    如上图所示,作为普通函数调用时,this指向window 。作为对象属性调用时,this指向该对象。this是在对象内部函数定义的,但是调用的时候是作为普通函数调用,多以this依然指向window。

    this的指向,是根据调用时的环境,而非定义时的环境。

    以前看闭包的资料时,看到思考题,当时还似懂非懂,出处http://www.jb51.net/article/24101.htm

    六、思考题

    如果你能理解下面代码的运行结果,应该就算理解闭包的运行机制了。

    Js代码 
      var name = "The Window";   
      var object = {   
        name : "My Object",   
        getNameFunc : function(){   
          return function(){   
            return this.name;   
         };   
        }   
    };   
    alert(object.getNameFunc()());  //The Window

    这个思考题的执行结果,如图所示:

    第一步 object.getNameFunc() 结果是一个匿名函数,object.getNameFunc()()第二个括号调用匿名函数,并执行。此时是作为普通函数被调用的,所以this是指向全局变量,所以name输出为The window 。这里的结果应该是跟this有关系,但是现在还是不太清楚,作者把这道题目写在闭包的这个位置的意图,得再研究研究。 

     如果需要访问My object 就把this保存起来,如下图

     

    四:改变this指向,关于call()和apply();

    跟普通函数的调用相比,用call()或者apply()可以改变传入的this;

    c

    参考资料:《JavaScript设计模式与开发实践》 曾探

    未完待续

    18:00:54

  • 相关阅读:
    HTTPS加密越来越流行,为何要加密?
    百度全站 https FAQ:技术宅告诉你如何搜索更安全
    Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
    理解 Ruby Symbol (Ruby中的冒号)
    ruby on rails Mac 安装
    Homestead PHP7安装phpredis扩展
    CentOS单独编译安装PHP gd库扩展
    centos 6.5 安装composer
    centos 添加用户
    laravel 安装 Laravel 扩展包
  • 原文地址:https://www.cnblogs.com/enemy/p/5190854.html
Copyright © 2011-2022 走看看