深对象文字的简写?

时间:2017-02-22 18:15:48

标签: javascript object

我正在使用一个滑块构建器,它有大约10个级别的对象和数组来存储所有数据。前4个几乎总是结构相同,但是在不同的数组中。例如:

Slides[thisSlide].layers[thisLayer].animationgroup[thisAnimationId].sequence[currentSegment].duration

在任何给定的时间我可能在同一张幻灯片上工作,同一层,所以我想我可以声明一些变量,如:

var currentSlide = 0;
var currentLayer = 0;
var currentChild = "0";
var currentKeyframe = "";
    Slides.push({
    "background-color": "#aaaaaa",
    "canvasHeight": "200",
    "canvasWidth": "1000",
    "layers": []
    });
var CSL = Slides[currentSlide].layers[currentLayer];
var CAG = Slides[thisSlide].layers[thisLayer].animationgroup[thisAnimationId];

在应用程序的开头,然后可以用这种方式简写第一个例子:

CAG.sequence[currentSegment].duration;

它没有像我预期的那样起作用。后来当我尝试使用它时,我得到一个投诉,CSL没有定义,但它应该在全球范围内:

function updateStuff(){
    for (i = 0; i < CSL.length; i++) {
        //do something
    }
}

我只是在努力缩短我的代码,因为我在处理它并消除那些不需要的东西。

1 个答案:

答案 0 :(得分:2)

在你的例子中:

var currentSlide = 0;
var currentLayer = 0;
var currentChild = "0";
var currentKeyframe = "";
    Slides.push({
    "background-color": "#aaaaaa",
    "canvasHeight": "200",
    "canvasWidth": "1000",
    "layers": []
    });
var CSL = Slides[currentSlide].layers[currentLayer];

看起来layers数组为空,因此在这种情况下,layers数组的索引将返回undefined为CSL

请注意,如果当时定义了一个对象,您确实会获得对该对象的引用,但如果没有定义任何内容,则会为CSL分配“值类型”undefined,但不会参考