将此传递给window.onscroll函数

时间:2018-01-09 12:02:24

标签: javascript ecmascript-6 this

如何将this传递给分配给window.onscroll事件的函数?

我正在尝试在满足某个条件时触发myFunction()。我需要检查这个条件onscroll

  init() {
    window.onscroll = function() {
      if(this.currentItemCount() > this.totalElements){
        this.totalElements = this.currentItemCount();
        this.myFunction();
      }
    };
  }

但是我收到this.currentItemCount()不是函数的错误。我知道我需要将this传递给window.onscroll,但我无法弄清楚正确的语法。

2 个答案:

答案 0 :(得分:4)

您可以使用that = this构造。 (What does 'var that = this;' mean in JavaScript?

init() {
    var that = this;
    window.onscroll = function() {
      if(that.currentItemCount() > that.totalElements){
        that.totalElements = that.currentItemCount();
        that.myFunction();
      }
    };
  }

甚至更好地使用箭头功能从包装上下文中保留this(需要ES6支持或转换器):

init() {
    window.onscroll = () => {
      if(this.currentItemCount() > this.totalElements){
        this.totalElements = this.currentItemCount();
        this.myFunction();
      }
    };
  }

答案 1 :(得分:1)

你可以试试这个:

init() {
    var self = this;
    window.onscroll = function() {
      if(self.currentItemCount() > self.totalElements){
        self.totalElements = self.currentItemCount();
        self.myFunction();
      }
    };
  }
内部范围无法提供

this,但self可用。