深入了解this-1

0x00、从我对this的感想说起

JavaScript中的this机制是一个令人非常苦恼的机制,即使你在写JS代码中可以去尽量避免它,但是当去阅读一些源代码或者大牛的代码时候你却依旧绕不开它,而且作为一个很常用机制之一,this当然有他足够优雅的一面,那么何不去发现它奥秘的一面,并尽量驯服它了

0x01、为什么要运用this

先看一个函数的传入参数为一个对象的例子

  • demo1:
function identify(context){
      return context.name.toUpperCase();
    } 
    var edg = {
      name:'qi'
    }
    identify(edg);         //QI,其中egd作为对象作为参数被传入函数中

在这个例子的基础上,我们来增加复杂点实现一个函数复合调用

  • demo2:
function identify(context){
     return context.name.toUpperCase();
} 
function upIde(context){
    var a = 'hello' + identify(context);
    console.log(a);
    return a
}
var edg = {
     name:'qi'
}

  identify(edg);    //QI
  upIde(edg);      //'helloQI',只有upIde()和identify()的形参需要保持一致性才可以得到了我们想要的结果

那么使用this可以如何去解决demo2中的效果了

  • this-demo:
function identify(){
      return this.name.toUpperCase();
    } 
    function upIde(){
      var a = 'hello'+identify.call(edg);
      console.log(a);
    }
    var edg = {
      name:'qi'
    }
    identify.call(edg);    //QI
    upIde.call(edg);     //'helloQI'

上面的demo运用call()方法,将this指向edg对象,从而实现了和demo2中函数传对象作为参数一样的效果。

___总结: ___ 通过对比我们可以发现this提供了一种更优雅的方式来隐隐式“ 传递”一个对象引用,这样API的设计更简洁和易于复用;而且伴随你使用模式越来越复杂, 显式传递上下文对象(demo2中演示的)会让代码变得越来越混乱, 使用this则不会这样。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,917评论 2 17
  • 单例模式 适用场景:可能会在场景中使用到对象,但只有一个实例,加载时并不主动创建,需要时才创建 最常见的单例模式,...
    Obeing阅读 2,117评论 1 10
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,080评论 19 139
  • 星期六的下午,妈妈带着宝宝回老家去了,老公周六去单位值班,家里只剩下我一个人。自从有了小孩之后,很久没有享受过一个...
    深海小渔阅读 381评论 0 0
  • 我用智慧给大家拜年[太阳][鸡][红包] 〔一丁的玛雅冥想〕磁性的黄种子日 (2017.1.27) 你不仅是单独的...
    玛雅冥想一丁阅读 207评论 0 0