Javascript 如何在jquery中使用来自另一个函数的变量
这是我函数的一个基本版本(我第一次这么做,所以如果我没有很好地解释,我很抱歉) 因此,这个想法是skillsbtn=Javascript 如何在jquery中使用来自另一个函数的变量,javascript,jquery,oop,function,Javascript,Jquery,Oop,Function,这是我函数的一个基本版本(我第一次这么做,所以如果我没有很好地解释,我很抱歉) 因此,这个想法是skillsbtn=$(this)参考$(this)位于主页:函数中的任何内容。我尝试将变量从home:function复制到work:function,效果很好。但是我可以把我需要的变量放在init:function中,但是可以在home:function中调用它们,通过这样做,可以改变$(this)是什么意思,也就是说这个->主页,或者这个->工作 我试着像pages.init.skillsbtn
$(this)
参考$(this)
位于主页:函数中的任何内容。我尝试将变量从home:function
复制到work:function
,效果很好。但是我可以把我需要的变量放在init:function
中,但是可以在home:function
中调用它们,通过这样做,可以改变$(this)
是什么意思,也就是说这个->主页,或者这个->工作
我试着像pages.init.skillsbtn.call(this)
那样访问它,但它不起作用
希望你能帮忙
-谢谢在函数外部声明变量并在函数内部赋值,从而使变量成为全局变量
var globalVar,
pages = {
init:function(){
},
home:function(){
articleid = this.closest("article").attr('id');
skillsbtn = $(this).hasClass("skillsbt");
home = $('#home');
homeheight = '-' + home.height();
if (skillsbtn && articleid == "home"){
home.animate({"marginTop" : homeheight},800);
}
},
work:function(){
//same variables are requred here: skillsbtn = $(this).hasClass("skillsbt");...
},
skills:function(){
//same variables are requred here: skillsbtn = $(this).hasClass("skillsbt");...
},
contact:function(){
},
}
然后将您想要使用的任何内容分配给全局变量通过在函数外部声明变量并在函数内部分配变量,使变量成为全局变量
var globalVar,
pages = {
init:function(){
},
home:function(){
articleid = this.closest("article").attr('id');
skillsbtn = $(this).hasClass("skillsbt");
home = $('#home');
homeheight = '-' + home.height();
if (skillsbtn && articleid == "home"){
home.animate({"marginTop" : homeheight},800);
}
},
work:function(){
//same variables are requred here: skillsbtn = $(this).hasClass("skillsbt");...
},
skills:function(){
//same variables are requred here: skillsbtn = $(this).hasClass("skillsbt");...
},
contact:function(){
},
}
然后将您想要使用的任何变量分配给全局变量创建另一个对象,该对象包含您需要在全局范围内的变量,并将其用作存储库。试试这个:
var pages = {
init: function() {
},
settings: {
skillsButton: "test"
},
home: function() {
this.settings.skillsButton = "value changed in 'home'";
}
}
然后,您可以在任何需要的地方参考settings.skillsButton
创建另一个对象,该对象包含全局范围内所需的变量,并将其用作存储库。试试这个:
var pages = {
init: function() {
},
settings: {
skillsButton: "test"
},
home: function() {
this.settings.skillsButton = "value changed in 'home'";
}
}
然后,您可以在任何需要的地方参考settings.skillsButton
您在所有地方都使用全局变量(在
home
函数的前四个赋值之前,var
在哪里
您想共享状态,但不为此使用对象?这就是他们的目的。
什么是页面?如果它是某种类型的“存储库”或“命名空间”,可以使用大写名称来区分它不是普通实例
由于jQuery事件中的this
绑定到事件源,因此不能简单地使用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对象,则可以使用pages.xxx在函数调用和原始代码之间共享变量。但这不是正确的做法,除非你真的非常确定。你到处使用全局变量(在
home
函数的前四个赋值之前,var
在哪里)
您想共享状态,但不为此使用对象?这就是他们的目的。
什么是页面?如果它是某种类型的“存储库”或“命名空间”,可以使用大写名称来区分它不是普通实例
由于jQuery事件中的this
绑定到事件源,因此不能简单地使用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对象,则可以使用pages.xxx在函数调用和原始代码之间共享变量。但是,除非你真的非常确定,否则这不是正确的做法。他在这里会有问题,因为在我看来,这是他的代码中的DOM元素。他在这里会有问题,因为在我看来,这是他的代码中的DOM元素通过实践和教程学习,或者我需要阅读任何背景信息吗?为了擅长这一点,我认为练习是不够的,如果没有某种指导,你会学到很多“黑客”和“捷径”。如果你知道你想要什么,复制粘贴修改就可以了,但这不是一个长期的学习过程。你应该读一些书,或者读一些好的博客(虽然我不知道适合初学者的好博客;我在www.c2.com或www.martinfowler.com感觉不错,但这些都是关于更高层次的——但毕竟,设计才是最重要的,程序(以及编写它的语言)只是一个实现——如果你的设计不好,即使Smalltalk也帮不了你。所有这些(编程)可以通过实践和教程学习吗?或者我需要阅读任何背景信息吗?为了擅长这一点,我认为练习是不够的,如果没有某种指导,你会学到很多“黑客”和“捷径”。如果你知道你想要什么,复制粘贴修改就可以了,但这不是一个长期的学习过程。你应该读一些书,或者读一些好的博客(虽然我不知道适合初学者的好博客;我在www.c2.com或www.martinfowler.com感觉不错,但这些都是关于更高层次的——但毕竟,设计才是最重要的,程序(以及编写它的语言)只是一个实现——如果你的设计不好,即使Smalltalk也帮不了你)。