Зачем мне нужна функция push? - PullRequest
0 голосов
/ 14 марта 2012

Я не могу понять, как используется функция push и как она помогает. 1 - Зачем мне нужен код строки?

circles.push(newCircle);

2 - я копирую этот код в html-файл, и код не запускается, я должен здесь что-то пропустить? Thx

 <html>
<head>
<title>Your title here</title>

<script type = "text/javascript" language = "Javascript">
<!-- Hide from older browsers;
var svgns = 'http://www.w3.org/2000/svg';
var svgElement = document.createElementNS(svgns, 'svg');
document.body.appendChild(svgElement);

var Circle = function(x,y,size){
    this.element = document.createElementNS(svgns, 'circle');
    this.x = x;
    this.y = y;
    this.size = size;

    this.dx = 10*(Math.random()-0.5);
    this.dy = 10*(Math.random()-0.5);

    this.element.setAttribute('cx', this.x+'px');
    this.element.setAttribute('cy', this.y+'px');
    this.element.setAttribute('r', this.size+'px');
    this.element.setAttribute('stroke', 'black');
    this.element.setAttribute('stroke-width', '2px');
    this.element.setAttribute('fill', 'red');

    svgElement.appendChild(this.element);    
};

Circle.prototype.update = function(){
    this.x += this.dx;
    this.y += this.dy;
    this.element.setAttribute('cx', this.x+'px');
    this.element.setAttribute('cy', this.y+'px');
};


var circles = [];
for (var i = 0; i< 10; i++) {
    var newCircle = new Circle(100,100,10);
    circles.push(newCircle);     
}

window.setInterval(function(){
    for (var i = 0; i< circles.length; i++) {
        circles[i].update();
    }    
}, 30);




// end hide -->
</script>
</head>
<body>
<!-- Insert HTML here -->

</body>
</html>

Ответы [ 3 ]

2 голосов
/ 14 марта 2012
  1. .push - это метод массива, который добавляет Circle экземпляров в коллекцию (массив) circles.

    Массив circles используется как набор ссылок в блоке в конце фрагмента кода circles[i].update().

  2. Вы используете ссылку document.body до того, как встретите <body>. В результате document.body равен undefined, и ваш код выдает ошибку.
    Либо поместите блок <script> в <body>, либо отложите выполнение сценария с помощью window.onload=function(){ ... code here... }, либо атрибута defer в теге сценария.

1 голос
/ 14 марта 2012
  1. Метод push добавляет один или несколько элементов в конец массива.См. MDN документацию для получения более подробной информации.Вот пример того, как это работает:

    var sports = ["soccer", "baseball"];

    sports.push("football", "swimming");

    // Now, sports = ["soccer", "baseball", "football", "swimming"]

  2. Что не работает?

0 голосов
/ 14 марта 2012

Аххаха, это мой код.Я задавался вопросом, почему это выглядело так знакомо.Вы положили это в неправильном месте.В оригинальной скрипке, которую я сделал для вас, она запускалась в ответ на событие загрузки окна.

Вы можете сделать это самостоятельно или просто поместить тег сценария в тело, а не в голову.

Чтобы дождаться события загрузки, замените строку document.body.appendChild(svgElement); на следующую:

window.addEventListener('load', function(){
    document.body.appendChild(svgElement);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...