Переменные JavaScript, предоставляющие правильное значение при переходе через консоль, но не иначе - PullRequest
1 голос
/ 09 августа 2011

У меня есть переменная в конструкторе JavaScript, которая, кажется, установлена ​​на правильное значение при переходе через точки останова.Однако при запуске без точек останова переменная (которая должна быть массивом, который я ей предоставляю) в консоли выглядит как пустой массив.Я не знаю, используется ли свойство get / set прототипа, как описано здесь .Кроме того, я работаю над webkit, поэтому, если кто-то может помочь мне объяснить, почему он там не работает, я был бы признателен.Спасибо!

function Box(inElement){
    var self = this;
    this.element = inElement;
    this.boxes = (function () {
        var boxes = [];
        for (var i = 0; i < inElement.childNodes.length; ++i) {
            if (3 !== inElement.childNodes[i].nodeType) {
                boxes.push(inElement.childNodes[i]);
            }
        }
        return boxes;
    })();
    this.rotation = [-40,-20,0,20,40];
}

Box.prototype = 
{   
    get rotation(){
    return this._rotation;
    },

    set rotation(rotArray){

        console.log('rotArray');
        console.log(rotArray);

        var thisrot;
        this._rotation = rotArray;
        for(var i=0; i<this.boxes.length; i++){
            thisrot = rotArray.shift();
            this.boxes[i].style.webkitTransform = 'rotateY(' + thisrot + 'deg) translateZ(170px)';
        } 
    }
}

function loaded()
{
    new Box(document.getElementById('area'));
}

window.addEventListener('load',loaded, true);

Итак, после некоторой путаницы я обнаружил, что box.push (inElement.childnodes [i] - проблемная строка. Когда закомментировано, значение получается ожидаемым.

1 Ответ

1 голос
/ 09 августа 2011

Вы удаляете все элементы из вашего массива в цикле внутри set rotation, используя shift.Массивы передаются по ссылке в JavaScript, а не по значению.Если вы хотите создать копию вашего массива, вам придется использовать Array.slice:

this._rotation = rotArray.slice();
...