Javascript jquery闭包无法检索具有DOM对象的私有变量
如果有人能帮我的话,我在闭包和检索一个私有变量方面遇到了问题,这个私有变量是使用jquery通过id选择的元素。我有这样一个模块:Javascript jquery闭包无法检索具有DOM对象的私有变量,javascript,jquery,dom,closures,Javascript,Jquery,Dom,Closures,如果有人能帮我的话,我在闭包和检索一个私有变量方面遇到了问题,这个私有变量是使用jquery通过id选择的元素。我有这样一个模块: var package = package || {}; (function() { if(!package.slider) package.slider = {}; function Slider() { } // --------- /Public Member
var package = package || {};
(function() {
if(!package.slider)
package.slider = {};
function Slider() {
}
// --------- /Public Members --------- //
Slider.prototype = {
init: function(){
_setEvents();
}
};
// --------- Public Members --------- //
// --------- Private Members --------- //
var shoePreview = $('#shoe-preview'); /*somehow this variable does NOT get recognised even though I have it in the DOM.*/
function _setEvents(){
$.subscribe('getAllPerspectives', function(event){ _getAllPerspectives() });
$.subscribe('showPreview', _show);
$.subscribe('hidePreview', _hide);
}
function _getAllPerspectives(){
_getAngleShoeImage(helper.getCurrentAngle());
$.each(constants.angles, function(key, val){
if(val != helper.getCurrentAngle()){
_getAngleShoeImage(val);
}
});
}
function _getAngleShoeImage(angle){
var shoeImage = shoePreview;
shoeImage.html('<p>Hello World</p>');
}
var that = new Slider();
package.slider = that;
})();
$(document).ready(function(){
$.each(package, function (key, val){
val.init();
});
});
var package=package | |{};
(功能(){
如果(!package.slider)
package.slider={};
函数滑块(){
}
//---------------/公众成员------//
Slider.prototype={
init:function(){
_setEvents();
}
};
//------公众成员------//
//------私人成员------//
var shoePreview=$(“#shoe preview”);/*尽管我在DOM中有这个变量,但不知何故,它没有被识别*/
函数_setEvents(){
$.subscribe('getAllPerspectives',函数(事件){u getAllPerspectives()});
$.subscribe('showPreview',_show);
$.subscribe('hidePreview',_hide);
}
函数_getAllPerspectives(){
_getAngleShoeImage(helper.getCurrentAngle());
$.each(常数、角度、函数(键、值){
if(val!=helper.getCurrentAngle()){
_getAngleShoeImage(val);
}
});
}
函数_getAngleShoeImage(角度){
var shoeImage=shoePreview;
html(“helloworld”);
}
var=newslider();
package.slider=那个;
})();
$(文档).ready(函数(){
$。每个(包、功能(键、val){
val.init();
});
});
现在,如果您查看代码,有一个名为shoePreview的变量,我假设模块之外的任何东西都无法访问该变量
现在,在稍后的代码中的某个地方,我将调用一些方法,这些方法将触发_getAngleShoeImage,我在其中将名为shoeImage的变量设置为私有shoePreview变量
问题是,一旦我尝试使用jquery的html()调用,它似乎无法识别shoePreview变量是什么
我已经通过替换var shoeImage=$(“#shoe preview”),然后使用所需的标记调用html(),对其进行了测试,效果良好
这个问题很小,但我快发疯了。我是否正在编写var shoeepreview=$(“#鞋预览”);以错误的方式,或者有更多的东西。任何帮助都将不胜感激
谢谢。这里只有一个问题:
(function(){hackhack()})(
字面意思是-运行闭包,这意味着您试图在DOM就绪之前访问它,您只需要在init之后设置var,而不是在main函数中
var package = package || {};
(function() {
if(!package.slider)
package.slider = {};
function Slider() {
}
// --------- /Public Members --------- //
Slider.prototype = {
init: function(){
//New function here
_setVars();
_setEvents();
}
};
// --------- Public Members --------- //
// --------- Private Members --------- //
//make it accessible for other proto functions;
var shoePreview;
function _setVars() {
shoePreview=$('#shoe-preview'); // now it will be set when init() run not when object proto initialised
}
function _setEvents(){
$.subscribe('getAllPerspectives', function(event){ _getAllPerspectives() });
$.subscribe('showPreview', _show);
$.subscribe('hidePreview', _hide);
}
function _getAllPerspectives(){
_getAngleShoeImage(helper.getCurrentAngle());
$.each(constants.angles, function(key, val){
if(val != helper.getCurrentAngle()){
_getAngleShoeImage(val);
}
});
}
function _getAngleShoeImage(angle){
var shoeImage = shoePreview;
shoeImage.html('<p>Hello World</p>');
}
var that = new Slider();
package.slider = that;
})();
$(document).ready(function(){
$.each(package, function (key, val){
val.init();
});
});
var package=package | |{};
(功能(){
如果(!package.slider)
package.slider={};
函数滑块(){
}
//---------------/公众成员------//
Slider.prototype={
init:function(){
//这里有新功能
_setVars();
_setEvents();
}
};
//------公众成员------//
//------私人成员------//
//使其可用于其他原型功能;
var-shoePreview;
函数_setVars(){
shoePreview=$(“#shoe preview”);//现在它将在init()运行时设置,而不是在初始化对象proto时设置
}
函数_setEvents(){
$.subscribe('getAllPerspectives',函数(事件){u getAllPerspectives()});
$.subscribe('showPreview',_show);
$.subscribe('hidePreview',_hide);
}
函数_getAllPerspectives(){
_getAngleShoeImage(helper.getCurrentAngle());
$.each(常数、角度、函数(键、值){
if(val!=helper.getCurrentAngle()){
_getAngleShoeImage(val);
}
});
}
函数_getAngleShoeImage(角度){
var shoeImage=shoePreview;
html(“helloworld”);
}
var=newslider();
package.slider=那个;
})();
$(文档).ready(函数(){
$。每个(包、功能(键、val){
val.init();
});
});
谢谢,我想这可能会奏效。这样做之后,我就能够得到一个对象,但是,当我试图使用html()查看其中的标记时,当我试图将其输出为警报时,它似乎总是返回未定义。这很奇怪(有什么可能出错的吗?你真是个传奇!!:)谢谢你的快速回复。你写(function(){hackhack()})的时候我在笑。这只是你写这篇文章的特殊原因吗?真的非常感谢:)我想我用了几周前读到的文件