ES6:类中内部局部函数访问类this的简单解决方案
解决ES6构造函数内局部函数访问类方法的问题
嘿,我完全懂你的困扰——构造函数里的局部普通函数没法正确访问类实例的this,导致调用类方法时出错对吧?其实不用纠结那些复杂的闭包解释,有两个超简单的方案就能搞定:
方案一:用箭头函数代替普通局部函数
箭头函数不会绑定自己的this,它会直接继承外层作用域(也就是构造函数)的this,刚好就是我们需要的类实例对象。修改后的代码如下:
class Example { constructor() { // 换成箭头函数 const functionWhichRequiredInConstructorOnly = () => { return this.methodWhichRequredAnywhere() + ' complete'; } this.message = functionWhichRequiredInConstructorOnly(); } methodWhichRequredAnywhere() { return 'test'; } }
这样调用functionWhichRequiredInConstructorOnly()时,里面的this就指向当前的Example实例,自然能正常调用methodWhichRequredAnywhere()了。
方案二:提前保存类实例的this到变量
如果更习惯用普通函数,也可以提前把构造函数里的this存成一个不会被函数改变的变量(比如self或者that),然后在局部函数里用这个变量访问类方法:
class Example { constructor() { // 把类实例的this存起来 const self = this; function functionWhichRequiredInConstructorOnly() { // 用self代替this return self.methodWhichRequredAnywhere() + ' complete'; } this.message = functionWhichRequiredInConstructorOnly(); } methodWhichRequredAnywhere() { return 'test'; } }
普通函数的this是在调用时确定的,直接调用它的话this会指向全局对象(严格模式下是undefined),但我们提前保存的self始终指向类实例,所以就能顺利访问到类方法了。
这两个方案都很直观,完全不用搞复杂的闭包操作,选你顺手的用就行~
内容的提问来源于stack exchange,提问作者Takeshi Tokugawa YD
相关产品推荐
相关产品推荐

