作家
登录

换个思路理解Javascript中的this

作者: 来源: 2017-07-27 09:43:11 阅读 我要评论

在网上很多文┞仿都对 Javascript 中的 this 做了具体的介绍,但大年夜多是介绍各个绑定方法或调用方法下 this 的指向,于是我想有一个同一的思路来更好懂得 this 指向,使大年夜家更好断定,以下有部分内容不是道理,而是一种解题思路。

大年夜call办法开端

DOM事宜处理函数中的this

call 办法许可切换函数履行的高低文情况(context),即 this 绑定的对象。

大年夜多半介绍 this 的文┞仿中都邑把 call 办法放到最后介绍,但此文我们要把 call 办法放在第一位介绍,并大年夜 call 办法切仁攀来研究 this ,因为 call 函数是显式绑定 this 的指向,我们来看看它若何模仿实现(不推敲传入 null 、 undefined 和原始值):

  1. Function.prototype.call = function(thisArg) { 
  2.     var context = thisArg; 
  3.     var arr = []; 
  4.     var result; 
  5.  
  6.     context.fn = this; 
  7.  
  8.     for (let i = 1, len = arguments.length; i < len; i++) { 
  9.         arr.push('arguments[' + i + ']'); 
  10.     } 
  11.  
  12.     result = eval("context.fn(" + arr + ")"); 
  13.  
  14.     delete context.fn; 
  15.  
  16.     return result; 
  17.  

大年夜以上代码我们可以看到,把调用 call 办法的函数作为第一个参数对象的办法,此时相当于把第一个参数对象作为函数履行的高低文情况,而 this 是指向函数履行的高低文情况的,是以 this 就指向了第一个参数对象,实现了 call 办法切换函数履行高低文情况的功能。

对象办法中的this

全局中的this

在模仿 call 办法的时刻,我们应用了对象办法来改变 this 的指向。调用对象中的办法时,会把对象作为办法的高低文情况来调用。

既然 this 是指向履行函数的高低文情况的,那我们先来研究一下调用函数时的履行高低文情况。

下面我门来看看调用对象办法时履行高低文是若何的:

  1. var foo = { 
  2.     x : 1, 
  3.     getX: function(){ 
  4.         console.log(this.x); 
  5.     } 
  6. foo.getX(); 

复杂情况下的this

构造函数中的this

  1. function Foo(){ 
  2.     this.x = 1; 
  3.     this.getX = function(){ 
  4.         console.log(this.x); 
  5.     } 
  6. var foo = new Foo(); 
  7. foo.getX();  

履行 new 如不雅不推敲原型链,只推敲高低文的切换,就相当于先创建一个空的对象,然后把这个空的对象作为构造函数的高低文,再去履行构造函数,最后返回这个对象。

  1. var newMethod = function(func){ 
  2.     var context = {}; 
  3.  1/4    1 2 3 4 下一页 尾页

      推荐阅读

      检察改革的“贵州答卷”——“智慧检务”

    改革大年夜潮,风生水起;蹄疾步稳,行精细远。2014年12月,贵州省作为全国首批司法体系体例改革试点省份之一,率先拉开司改大年夜幕。三年多来,贵州省审查院紧紧抓住完美司法义务制这个&>>>详细阅读


    本文标题:换个思路理解Javascript中的this

    地址:http://www.17bianji.com/lsqh/36427.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)