使用“ this”关键字发生冲突

时间:2018-09-26 16:40:45

标签: javascript typescript

我在 this 关键字方面遇到问题。

我有一个将由第三方JavaScript库调用的方法(我无法修改该库的代码),并且在方法 this 中将其设置为特定的上下文(来自第三方库),因此我定义了TypeScript方法,如下所示:

class CFoo {
   private foo(value?: number) {
     // get the value of this (returned from the third-party library)
     const model = this;

     // call another method inside the class
     this.anotherMethod();
   }

   private anotherMethod()
   {
   }
}

但是在方法内部,我需要在同一类中调用另一个方法。

当我尝试调用其他方法时,出现JavaScript错误“ anotherMethod”不是函数。

但是,如果我以这种方式声明方法

private foo = (value?: number) => {
}

我可以从类的角度获得正确的信息,我的意思是,我可以使用 this.method()访问类成员,但是我无法访问第三方库提供的值通过 this

我需要访问第三方库提供的 this 值,并且需要能够在类内部调用另一个方法。

我该如何解决?


更新

调用方法时

this = {    名称:“ xxx”,    年龄:40 };

根据@vlaz的评论更新课程

class CFoo {
   me = this;   // @vlaz suggestion

   private foo(value?: number) {
     // get the value of this (returned from the third-party library)
     const model = this as any;

     /*
      * model = {
      *    name: "xxx",
      *    age: 40
      * };
      *
      */

     // call another method inside the class

     me.anotherMethod();   // typescript error
   }

   private anotherMethod()
   {
   }
}

当我尝试调用 anotherMethod()时,TypeScript编译器显示以下错误

找不到名称“我”。您是说实例成员“ this.me”吗?

1 个答案:

答案 0 :(得分:1)

class CFoo {
    private foo: Function;

    constructor() {
        const self = this;
        this.foo = function (value?: number) {
            // get the value of this (returned from the third-party library)
            const model = this;

            // call another method inside the class
            self.anotherMethod();
        }
    }

    private anotherMethod()
    {
    }
 }