如何解决基本理解问题:对象范围
| 当我在这样的普通函数中实例化一个对象(简单)时: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”的实例。因为在函数setgallery中声明了对象“ mygallery \”,所以它是一个本地对象,该对象将在函数完成后丢失。但是simplegallery绑定了与设置交互的事件,这些事件是simplegallery的属性...当触发事件时,这些属性为何仍然有效?
但是,这样的实例可以生存多长时间,为什么呢?
问题:如何从setgallery之外的其他函数访问此实例的属性?
就像当我想获取mygallery.setting.imagearray.length的值时...
感谢您帮助我理解! :-)
解决方法
Javascript具有函数作用域,函数内部的所有变量
(用var声明)仅在该位置和该位置的任何位置可见
功能。
函数是一个对象,该对象的生存期
离开函数主体时不一定会结束。例如
setGallery
将\'活\',因为mygallery
继续\'活\',但是
失去对mygallery
的访问权限(我敢肯定会有很多
其他职位的解决方案建议)。
,在这种情况下,函数结束后不会破坏局部变量,因为simpleGallery设置了我想为DOM绑定的事件。您会看到,如果javascript看到某些对象被其外部的某些对象引用,则这些对象会将它们保存在内存中。
该对象将一直保留到程序结束的内存中,否则将清除所有引用。
要获得imagearray.length
,您需要在对象范围内触发一些事件。为此,您需要更改simpleGallery
类以设置事件,并在this
范围内触发回调函数
如果在example5ѭ构造函数中添加以下示例,则domElement
上的onclick
事件将在simpleGallery
实例范围内触发函数someYourFunction
。因此,在此功能中,您将可以使用this.imagearray.length
var self=this;
domElement.addEventListener(
\"click\",function(event) {someYourFunction.apply(self,event)},false);
,设置是simpleGallery的公共成员,因此您可以访问其对象上的设置。现在,您需要管理simpleGallery对象(myGallary)来访问设置,此操作的可能方法可以是以下之一:
1)从setGallery返回mygallery对象,然后可以通过以下方式调用它
setGallery(img).setting.imagearray.length.. or
var gallary = setGallery(img);
gallary.setting.imagearray.length....
2)将setGallary设为诸如simpleGallery之类,并使用this将myGallary定义为public成员
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函数中对其进行分配,并在任何地方使用它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。