在Javascript类中创建全局变量时出错

时间:2018-10-10 04:53:35

标签: javascript jquery ajax

我正在尝试创建一个页面变量,该变量可由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不会多次加载。

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

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

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

话说回来,这里有严重的设计气味。您最好只在类外定义变量。

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

class Scroller {
    /* ... */
}

Scroller.page = 1;

答案 1 :(得分:0)

您可以在CourseStatus中定义它(我建议这样做)

constructor

,然后使用class Scroller { constructor(){ this.page = 1; this.events(); } } (或其他任何方式)进行更改

或者如果您真的真的需要像这样的Class之外的全局对象

this.page = 2

答案 2 :(得分:-1)

这也可以按照您的要求进行。可能不推荐!

全局变量可能导致头痛和内存泄漏。

在许多相同代码上工作时也很痛苦。

-Encoding

更好的方法是将数据存储在单独的对象中。

这样,您可以添加所需的变量,可以从任何地方访问。

它保持清洁且易于使用。

function notinglobalScope(){
  window["page"] = 1
}
notinglobalScope()


console.log(page)