在Javascript类中创建全局变量时出错
我试图创建一个页面变量,它可以被我的Scroller类用于无限滚动。我想,我需要它是全局的,这样它就能在ajax函数之外记住自己在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
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();
}
}