一分钟秒懂this

关于 this,很多小伙伴可能都会很痛苦,或许还会遇到这样那样的问题。
那么,如何快速的理解和掌握 this 的运用呢?
等你看完我这篇文章,相信你一定会有一种豁然开朗的感觉。

对于 this,你只需要记住这样一句话:
this 初始的时候并不具有指向性,
只有「当它所在的函数被调用的时候,this 会指向调用方。
看完我下面的例子,你一定会瞬间秒懂~

    var d = {
        a: function (n) {
            console.log(this.c)
        },
        c: 'd.c'
    }
    var c = 'Window.c';
    d.a();

你还记得我刚才说的那句话吗?
this 在一开始定义的的时候并不具有指向性,
只有「当它所在的函数被调用的时候,this 会指向调用方。
在这段代码中,this 所在的函数是 a,在最后一行,通过d.a()调用,这时,this 会指向调用 a 函数的人,也就是 d,所以,console.log(this.c)这句话就会变成console.log(d.c),所以最后控制台打印出来的结果就是d.c

怎么样?是不是很简单呢?我们再来看下面这一段代码。

        var d = {
            a: function (n) {
               n()
            },
            c: 'd.c'
        }
        var c = 'Window.c';
        d.a(function () {
            console.log(this.c)
        });

我们用同样的方式来分析,this所在的函数为function () { console.log(this.c) },这个函数以参数的形式传入到 a 中,并通过代码n()实现该函数的调用,那么问题来了,n 本身就是这个函数,他的调用者是谁呢?
在 Javascript 中,所有函数的最顶层的调用对象都为全局对象 Window,所以在这段代码中,调用函数 n ( 也就是 this 所在的函数 ) 的那个人,就是全局对象 Window,所以console.log(this.c)这行代码就变成了console.log(Window.c),所以最后的输出结果就是:Window.c

看到这里,你是不是有一种豁然开朗的感觉呢?
那么上面那段代码,应该如何改才能让他继续输出d.c呢?
其实很简单,只要让调用 this 所在函数的那个人是 d 对象就好了。
没错,关键语句就是d.(function () { console.log(this.c) }),但是这样写太繁琐了,如果我想在上面那段代码的基础上进行修改,该怎么做呢?
其实也很简单,只要把 n 赋值给 d 的某个新属性(例如 d.n),然后再调用这个方法就可以啦( d.n())。完整代码如下:

        var d = {
            a: function (n) {
               d.n = n
               d.n()
            },
            c: 'd.c'
        }
        var c = 'Window.c';
        d.a(function () {
            console.log(this.c)
        });

看到这里,你就会觉得,原来 this 也没什么大不了嘛。
不过,理解 this 只是第一步,更重要的,是要学会举一反三,这样才会掌握的更加扎实、牢固。
此外,this 还有很多其他方面需要注意的,但是我相信,只要你理解了我写的这部分核心知识点,你再去看别的关于 this 的内容,也肯定会如鱼得水,十分顺利~

最后,
如果你觉得我的文章对你有帮助,
就请动动你的小手,
给我点一个赞吧,
你的赞将会是对我的最大的鼓励和支持~

同时,
也欢迎优秀的你给我提出宝贵的意见和建议,
我会不断努力,
把自己打磨的越来越优秀。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 12,392评论 2 17
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,869评论 19 139
  • 与其他语言相比,函数的this关键字在JavaScript中的表现略有不同,此外,在严格模式和非严格模式之间也会有...
    codingC阅读 3,652评论 0 0
  • 单例模式 适用场景:可能会在场景中使用到对象,但只有一个实例,加载时并不主动创建,需要时才创建 最常见的单例模式,...
    Obeing阅读 6,490评论 1 10
  • 我的外婆是一个地道的农村人,也是一个延续了中华传统美德的人。她以身作则,让我明白了活着的意义。 烈日灼...
    思想的思阅读 3,952评论 2 3

友情链接更多精彩内容