javascript - 基本理解题 : objects scope

标签 javascript scope

当我在像这样的普通函数中实例化一个对象(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 绑定(bind)了与设置交互的事件,这些设置是 simpleGallery 的属性......当这些事件被触发时,这些属性为什么仍然存在?

但是,这样的实例能活多久?为什么?

  1. 问题:如何从 setGallery 以外的其他函数访问此实例的属性? 就像当我想获得 mygallery.setting.imagearray.length 的值时......

感谢您帮助我理解! :-)

最佳答案

在这种情况下,局部变量在函数结束后不会被销毁,因为我想 simpleGallery 在 DOM 上设置了绑定(bind)事件。您会看到,如果 javascript 发现某些对象被外部对象引用,它会将这些对象保存在内存中。
该对象将一直存在于内存中直到程序结束,否则所有引用都将被清除。
获取imagearray.length您需要在对象范围内触发一些事件。为此,您需要更改 simpleGallery设置事件的类和要在 this 范围内触发的回调函数
如果您将下面的示例添加到 simpleGallery构造函数比 onclick事件 domElement将触发一个函数 someYourFunctionsimpleGallery范围内实例。所以在这个函数中你可以访问 this.imagearray.length

var self=this;
domElement.addEventListener(
  "click",
  function(event) {someYourFunction.apply(self, event)},
  false);

关于javascript - 基本理解题 : objects scope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5660387/

相关文章:

javascript - 如何在 BIRT 报告中绘制或绘制定制设计的图表?

javascript - Ionic - 没有在工厂内的 $ionicPopup.show 中返回值 $scope

javascript - 如何修复 Google Chrome 中未定义的 cookie 值?

javascript - 如何在 React 中使用 i18n-iso-countries?

perl - 为什么 "my @variable"在 sub 内并由 sub/sub 修改的行为如此奇怪

R 包范围和掩码

php - 如何在不传递数组的情况下使类可以访问数组?

c - 在 C 中,如何将全局变量的范围限制在声明它的文件中?

javascript - 处理Python在JS文件中生成的JSON

JavaScript 导入 JSON 数据 - 循环按长/纬度位置排序