Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 如何在jquery回调中访问“this”范围和私有方法?_Typescript - Fatal编程技术网

Typescript 如何在jquery回调中访问“this”范围和私有方法?

Typescript 如何在jquery回调中访问“this”范围和私有方法?,typescript,Typescript,考虑下面的代码。在click回调中,我试图访问此的color css属性。同时,我需要调用一个私有方法setResponsiveClass,这只能通过使用this.setResponsiveClass来实现。代码显然不会编译,因为它的作用域是事件处理程序 class SomeClass { constructor { $('.someclass').on('click', function() { var color = $(this).css('color')

考虑下面的代码。在click回调中,我试图访问此的color css属性。同时,我需要调用一个私有方法setResponsiveClass,这只能通过使用this.setResponsiveClass来实现。代码显然不会编译,因为它的作用域是事件处理程序

class SomeClass {
  constructor {    
    $('.someclass').on('click', function() {

      var color = $(this).css('color');
      console.log(color);          

      this.setResponsiveClass();
    });
 }        

  private setResponsiveClass() {
    console.log('hello')
  }
}    
这提供了通过保持当前代码来实现事件作用域的方法,或者通过转换为胖箭头语法来实现类作用域的方法


如何从同一函数中的事件作用域和私有方法访问此函数

你可以用这种方式触发它

解决方案1。 解决方案2。
我希望这能帮助您解决方案1不起作用,因为TypeScript编译器将其重新定义为_this=this。解决方案2确实有效,但我们基本上回到了JavaScript技巧。我希望TypeScript能有一个更优雅的解决方案来解决这个问题。
class SomeClass {
  constructor {    
    $('.someclass').on('click', = () => {

      var color = $(this).css('color');
      console.log(color);          

      this.setResponsiveClass();
    });
 }        

  private setResponsiveClass() {
    console.log('hello')
  }
} 
class SomeClass {
  constructor {    

    var self = this;  <====

    $('.someclass').on('click', function() {

      var color = $(this).css('color');
      console.log(color);          

      self.setResponsiveClass();  <====
    });
 }        

  private setResponsiveClass() {
    console.log('hello')
  }
}