首页 > 解决方案 > 在 Javascript 类中创建全局变量时出错

问题描述

我正在尝试创建一个页面变量,我的 Scroller 类可以使用该变量进行无限滚动。我认为我需要它是全局的,以便它在 ajax 函数之外记住自己。

class Scroller {
  window.page = 1;

  constructor(){
    this.events();
  }

  events(){
    $(document).on("scroll", this.on_scroll.bind(this))
  }

  on_scroll(e){
    var scroll_top = $(window).scrollTop();
    var body_height = $('body').height();
    var win_height = $(window).height();
    var height_diff = body_height - win_height;


    if( (scroll_top+1 >= height_diff) && working==false){
        working=true;
        console.log("greater than diff");
        this.load_more();
    }
    else{
        //console.log(scroll_top);
        //console.log("greater than diff");
    }

}

我也试过:

var page = 1;
page = 1;
$page = 1;

所有这些都会产生错误,通常是语法错误。在类中创建全局变量的最佳方法是什么?或任何用于传递给正在调用的滚动函数的变量。我还需要这些,所以我可以创建一个“工作”变量,这样 ajax 就不会多次加载。

谢谢你的帮助

标签: javascriptjqueryajax

解决方案


如果尚未定义,您可以在构造函数中定义它:

class Scroller {
    constructor() {
        window.page = window.page || 1;
        this.events();
    }
}

话虽如此,这里有一种严重的设计气味。您也可以在类之外定义变量。

另请注意,它不必是全局的;您可以在类对象本身上定义它并将其称为Scroller.page

class Scroller {
    /* ... */
}

Scroller.page = 1;

推荐阅读