zoukankan      html  css  js  c++  java
  • JS this的指向

      总结:this指向调用函数的那个对象

      在不同的应用场景this的指向有所不同,但细细思考都符合总结的意思。

    场景一:一般的函数调用

      这种常见的函数调用方式this指向的是window,因为相当于是window对象调用的函数。

    var name  = "window";
    
    function test(){
        this.name = "local";
    }
    test();//window.test();
    alert(name);// local window.name 属性被修改成了 local

     场景二:作为对象的方法被调用

      这种方式this就指向了此对象。

    var name  = "window";
    var test = {
        name : "local",
        getName: function(){
            return this.name;
        }
    };
    alert(test.getName());// local    this指向的是test对象

      加入了闭包

    var name  = "window";
    var test = {
        name : "local",
        getName: function(){
            return this.name;
        }
    };
    alert(test.getName());// local    this指向的是test对象

     getName方法返回一个函数,形成闭包,注意调用方法"test.getName()()","test.getName()"返回的是一个函数,那么"test.getName()()"就是调用此函数,所以调用的其实是

    function(){
    return this.name;
    };

    而这时的this已经指向了window了,所以test.getName()()等价于window.test.getName()()。如果要this保持对test对象的指向,就要将环境保存下来在test.getName()()中使用,如下:

    var name  = "window";
    var test = {
        name : "local",
        getName: function(){
            return this.name;
        }
    };
    alert(test.getName());// local    this指向的是test对象

    场景三:作为构造函数被调用

    var name  = "window";
    var test = {
        name : "local",
        getName: function(){
            return this.name;
        }
    };
    alert(test.getName());// local    this指向的是test对象

    参考:http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html

  • 相关阅读:
    生成器
    IO调度算法
    进程与线程
    磁盘阵列(RAID)实例
    KVM虚拟化技术(七)虚拟机配置文件
    查询快递单号-京东快递接口
    快递单号查询快递鸟API接口-优速快递
    查询快递单号-德邦快递
    快递单号查询快递鸟API接口-EMS
    快递单号查询快递鸟API接口--安能快递
  • 原文地址:https://www.cnblogs.com/Flychown/p/6247977.html
Copyright © 2011-2022 走看看