zoukankan      html  css  js  c++  java
  • what's this? 浅谈js中this的指向问题

    刚刚学习js的朋友可能和我一样,看到代码中的this总是一脸懵逼,不知道this到底指向谁。经过一段时间的了解,我想跟大家分享下自己的理解。
    懵逼

    何时出现this

    函数在调用的时候,会自动获得两个特殊变量:this和arguments,所以,函数可以调用this变量。

    this指向谁?

    通过一段时间的练习,我觉得可以总结为一句话:this指向他所在函数的作用域对象。如果函数是定义在全局作用域的,那么this指向window,如果函数被某个自定义对象调用,那么this就指向该对象。下面我们通过几个场景进行理解:

    1. 场景一:定义在全局作用域
    function test(){
    	alert(this);
       }
       test();
    

    结果:
    window全局对象
    2. 场景二:被某个对象调用

    var O = {
    	f : function(){
    		alert(this);
    	}
    }
    O.f();
    

    结果:
    返回调用该函数的对象
    3. 场景三:闭包

    var object = {
    	getThis : function(){
    		return function(){
    			return this;
    		}
    	}
    }
    alert(object.getThis()());
    

    结果:
    window对象

    var object = {
    	getThis : function(){
    		var that = this;
    		return function(){
    			return that;
    		}
    	}
    }
    alert(object.getThis()());
    

    结果:
    object对象
    对场景三的解释说明:大家都清楚闭包的一个特点是可以保留外部函数的变量对象,在场景三的第二个里,我们使用that保存了this的值,this指向object对象,所以that也指向object对象。

    总结

    其实this的问题并不复杂,我们只要记住,this指向函数所在作用域的作用域对象,然后平时多练习,就可以知道this指向谁了。

  • 相关阅读:
    [51nod1247]可能的路径(思维题)
    天梯赛L1020 帅到没朋友(map的使用)(模拟,数组非排序去重)
    洛谷 p1030 树的遍历
    天梯赛L1046 整除光棍(模拟)
    牛客,并查集,简单dp经商
    天梯赛L1043 阅览室 模拟题
    天梯赛L1049(模拟+vector的使用)
    天梯赛L1011,简单模拟
    codeforces 1201 c
    天梯赛L2003月饼(简单排序题)
  • 原文地址:https://www.cnblogs.com/woodyblog/p/6005404.html
Copyright © 2011-2022 走看看