代码之家  ›  专栏  ›  技术社区  ›  vcRobe

使用“this”关键字的冲突

  •  1
  • vcRobe  · 技术社区  · 6 年前

    我有一个将由第三方JavaScript库调用的方法 (我无法修改库的代码) 在方法内部

    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() 但我无法通过访问第三方库提供的值 .

    第三方库提供的值,我需要能够调用类内的另一个方法。

    我怎样才能解决这个问题?


    调用方法时

    这个={ 年龄: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()
       {
       }
    }
    

    当我试着打电话的时候 热法() TypeScript编译器显示以下错误

    1 回复  |  直到 6 年前
        1
  •  1
  •   vcRobe    6 年前
    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()
        {
        }
     }