基本理解问题:对象范围

如何解决基本理解问题:对象范围

| 当我在这样的普通函数中实例化一个对象(简单)时:
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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?