gpt4 book ai didi

javascript - 基本理解题 : objects scope

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:54:20 26 4
gpt4 key购买 nike

当我在像这样的普通函数中实例化一个对象(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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com