vObjects.push.apply(null, aObjects);
И еще один способ сделать это.
Трюк здесь прост. Если вы попытаетесь использовать метод concat()
для загрузки вашего массива в вектор, он потерпит неудачу, потому что вход является вектором, и вместо добавления элементов вектора AS добавит весь вектор как одну запись. И если бы вы использовали push()
, вам нужно было бы просмотреть все элементы в массиве и добавить их один за другим.
В ActionScript каждая функция может быть вызвана тремя способами:
Обычный способ: vObjects.push(aObjects)
Выдает ошибку, потому что aObjects
это не Object
, а Array
.
Метод call
: vObjects.push.call(this, myObject1, myObject2, ..., myObjectN)
Не помогает нам, потому что мы не можем разбить массив aObjects
на список через запятую, который мы можем передать функции.
Метод apply
: vObjects.push.apply(this, aObjects)
Пройдя по этому маршруту, AS с радостью примет массив в качестве входных данных и добавит его элементы в вектор. Вы все равно получите ошибку времени выполнения, если типы элементов массива и вектора не совпадают. Обратите внимание на первый параметр: он определяет то, что ограничено this
при запуске функции, в большинстве случаев null
будет в порядке, но если вы используете ключевое слово this
для вызова функции, вы должны передать что-то отличное от null
.