刷一道LC题的时候想拆解一个主函数M, 将其数个功能函数绑定到原型上进而减少主函数的长度.之后在主函数M中通过this.功能函数的方式来执行相关任务.在系统中指向代码后发现在主函数中this指向的是Global对象,根本找不到原型上绑定的函数. 这是怎么回事呢?
其实很简单,就是一个涉及this绑定的概念. 在一个函数内部,它的this指向的是函数所在的作用域.比如这道LC题中的函数M外部环境是Global那他的this就指向了G, 很显然,G的作用域中并没有之前绑定的那几个函数,他们被绑定在M的原型对象上.
那么要怎么样才能让M内部的this指向一个单独的非Global空间呢?
答案是需要对M进行实例化,再用一个变量接受实例化后的对象. 实例化的过程会为M开辟一个单独的空间,再将这个空间用赋给一个变量,这时我们访问这个变量的this就会访问到这个空间,也能访问到他的原型对象.
测试代码时系统直接调用函数(直接将数据带入函数执行) 没有生成实例对象 所以函数内this指向的是函数所在作用域-global
外部调用先实例化对象再调用对象 this就被绑定到对象身上了