当我在像这样的正常函数中实例化一个对象(simplegallery)时:
function setGallery(imgs){
var galleryArray = new Array();
for(var i=0; i<imgs.length; i++){
galleryArray.push([imgs[i].imgpath + imgs[i].imghash + imgs[i].thumb + '.' + imgs[i].ext, "", "", ""]);
}
var mygallery=new simpleGallery({
navpanelheight: 40,
wrapperid: "fbImg", //ID of main gallery container,
dimensions: [80, 60], //width/height of gallery in pixels. Should reflect dimensions of the images exactly
imagearray: galleryArray,
autoplay: [false, 2500, 2], //[auto_play_boolean, delay_btw_slide_millisec, cycles_before_stopping_int]
persist: false, //remember last viewed slide and recall within same session?
fadeduration: 500, //transition duration (milliseconds)
oninit:function(){ //event that fires when gallery has initialized/ ready to run
//Keyword "this": references current gallery instance (ie: try this.navigate("play/pause"))
},
onslide:function(curslide, i){ //event that fires after each slide is shown
//Keyword "this": references current gallery instance
//curslide: returns DOM reference to current slide's DIV (ie: try alert(curslide.innerHTML)
//i: integer reflecting current image within collection being shown (0=1st image, 1=2nd etc)
}
});
}
从我的理解,创建的对象“mygallery”是“simpleGallery”的一个实例。因为对象“mygallery”在函数setGallery中声明,所以它是一个本地对象,在函数完成后将丢失。但是simpleGallery绑定与设置交互的事件,这些设置是simpleGallery的属性......当触发thos事件时,这些属性如何仍然存在?
但是,这样的实例存活了多长时间?为什么?
感谢您帮助我理解! : - )
答案 0 :(得分:3)
在这种情况下,函数结束后不会销毁局部变量,因为simpleGallery会设置DOM上的绑定事件。你看,如果javascript看到一些对象被外面的东西引用,它就会把它们保存在内存中
此对象将存储在内存中直到程序结束或所有引用都将被清除
要获得imagearray.length
,您需要在对象范围内触发一些事件。为此,您需要更改simpleGallery
类以设置事件,并在this
范围内触发回调函数。
如果您将以下示例添加到simpleGallery
构造函数,onclick
上的domElement
事件将在someYourFunction
实例的范围内触发函数simpleGallery
。因此,在此功能中,您可以访问this.imagearray.length
var self=this;
domElement.addEventListener(
"click",
function(event) {someYourFunction.apply(self, event)},
false);
答案 1 :(得分:2)
Javascript具有函数作用域,函数内部的所有变量 (用var声明)仅在其中可见 功能
函数是一个对象,该对象的生命周期
离开功能体时不一定会结束。例如
setGallery
将“活着”因为mygallery
继续“活着”,但是
mygallery
的访问权限丢失了(我相信会有很多
其他职位的解决方案建议。)
答案 2 :(得分:1)
设置是simpleGallery的公共元素,因此您可以访问其对象的设置。现在您需要管理simpleGallery对象(myGallary)来访问设置,可能的方法可以是以下之一:
1)从setGallery返回mygallery对象,然后你可以按照以下方式调用它
setGallery(img).setting.imagearray.length.. or
var gallary = setGallery(img);
gallary.setting.imagearray.length....
2)使setGallary成为类似simpleGallery的类,并使用此定义myGallary作为公共成员
var setGallery = function(img){
................
this.myGallary = new simpleGallery( ..
.. ..
}
then access it as
var gallary = new setGallary(img);
gallary.myGallary.setting.imagearray.length
3)脏方法,创建一个全局变量来保存myGallary对象并在setGallary函数中分配它并在任何地方使用它。