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

  • 相关阅读:
    关于在MAC上进行 LARAVEL 环境 Homestead 安装过程记录
    js 贷款计算器
    js 实现阶乘
    js 两点间距离函数
    composer Your requirements could not be resolved to an installable set of packages
    vue 项目优化记录 持续更新...
    vue 项目打包
    vue 真机调试页面出现空白
    vue 真机调试
    谈谈-Android状态栏的编辑
  • 原文地址:https://www.cnblogs.com/Flychown/p/6247977.html
Copyright © 2011-2022 走看看