Вы используете глобальные переменные повсюду (где var
перед каждым из четырех первых назначений в функции home
)?
Вы хотите поделиться состоянием и не используете объекты для этого?Вот для чего они.Что такое страницы?Если это какое-то «хранилище» или «пространство имен», возможно, используйте имя UpperCase, чтобы отличить его от простого экземпляра.
Поскольку this
в событиях jQuery привязано к источнику события, выне может использовать this
явно, но вы можете сделать это:
var Pages = {
init:function(){
Pages.worker = new PagesWorker;
// later if you see fit you can have more of these
},
home:function(){
return Pages.worker.home($(this));
},
work:function(){
return Pages.worker.work($(this));
},
skills:function(){
return Pages.worker.skills($(this));
},
contact:function(){
return Pages.worker.contact($(this));
},
}
function PagesWorker(src){
// init
}
PagesWorker.prototype.home = function(src){
// use var xxx = yyy for ones local for this function only
// use this.xxx = yyy for those that should persist between functions
var articleid = src.closest("article").attr('id');
this.skillsbtn = src.hasClass("skillsbt");
var home = $('#home');
var homeheight = '-' + home.height();
if (this.skillsbtn && articleid == "home"){
home.animate({"marginTop" : homeheight},800);
}
};
PagesWorker.prototype.work = function(src){
//same variables are requred here: skillsbtn etc.
//no problem, use this.skillsbtn etc.
};
PagesWorker.prototype.skills = function(src){
//same variables are requred here: skillsbtn etc.
//no problem, use this.skillsbtn etc.
};
PagesWorker.prototype.contact = function(src){
//same variables are requred here: skillsbtn etc.
//no problem, use this.skillsbtn etc.
};
Если вы действительно уверены, что у вас будет только один объект страниц, вы можете использовать pages.xxx для совместного использования переменныхмежду вызовами функций и вашим исходным кодом.Но это не то, что нужно делать, если вы действительно, действительно уверены.