我正在尝试创建一个页面变量,该变量可由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不会多次加载。
感谢您的帮助
答案 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)