Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.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
在Javascript类中创建全局变量时出错_Javascript_Jquery_Ajax - Fatal编程技术网

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

在Javascript类中创建全局变量时出错,javascript,jquery,ajax,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

我试图创建一个页面变量,它可以被我的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就不会多次加载


感谢您的帮助

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

class Scroller {
    constructor() {
        window.page = window.page || 1;
        this.events();
    }
}
也就是说,这里有一种严重的设计味道。您也可以在类之外定义变量

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

class Scroller {
    /* ... */
}

Scroller.page = 1;

您可以在
构造函数中定义它(我建议这样做)

然后用this.page=2更改它

或者,如果你真的需要它,像这样在课堂外进行一次全球性的学习

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

正如你所问的,这同样有效。这可能不被推荐

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

在同一代码上的多个应用程序上工作时,这也是一种痛苦

函数notinglobalScope(){
窗口[“页面”]=1
}
notinglobalScope()

console.log(page)
查看在类外声明它是否会执行工作在类外声明它并在类内分配给它。内部和外部都将引用相同的变量。这就是全球化的典型含义。在web中,global通常指
窗口
对象,但也有例外。你所说的“严重的设计气味”是什么意思?@AndreiGheorghiu使用非限定的随机变量污染全局名称空间?如果您加载的下一个脚本也决定使用全局
页面
变量来执行完全不同的操作,该怎么办?“设计气味”有多种含义,有好的,也有坏的。这就是我问的原因。这对于初学者来说太多了,对于一个简单的变量来说。这毫无意义。
window.page = 1;
class Scroller {
    constructor(){  
        this.events();
      }
}