一分钟秒懂this

来源:互联网 发布:java类静态变量初始化 编辑:程序博客网 时间:2024/05/07 01:19

关于 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 的内容,也肯定会如鱼得水,十分顺利~

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

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

原创粉丝点击