В JavaScript динамически

Я сосредоточилась в последнее время на мои навыки PHP, но попадаю в JavaScript. Я знаком с обнаженной костной основы в jQuery. Я не так хорошо знаком с JavaScript, как я хочу быть. Я Соло-разработчика, так что я просто хочу, чтобы кто-то взгляните на это и указывать на какие-либо ошибки или вещи, которые я мог бы сделать лучше.

Что код делает

Создает произвольное количество

10494
6
задан 3 июля 2011 в 11:07 Источник Поделиться
Комментарии
1 ответ

Ты ошибался много раз в коде выше. Однако, это означает, что вы многое узнаете о том, как правильно взаимодействовать с DOM. Во многих случаях, есть встроенные модули, которые быстро и качественно сделать работу.

Во-первых, ты неправильно доступ к телу. документ.тело хорошо поддерживается ссылкой на орган, который был вокруг начиная по крайней мере дом Уровень 1.

Во-вторых, ты берешь нелегкий путь к созданию массива. В своей книге "JavaScript: в хорошие части", Дуглас Крокфорд настаивает на использовании литералов вместо конструкторов. В этом случае литерала массива []. Это удобный способ вызова новый массив().

В-третьих, ты неправильно перебирать в CDN массив для...в петлю, а не для петли. А для...в цикл предназначен для объектов, как он перебирает свойства объекта. Не только это медленнее, чем обычный для петли, но он также очень восприимчив к прототипу модификации. Например, попробуйте выполнить этот код сборки в MooTools (jsFiddle имеет один включен по умолчанию):

for(var key in [])
{
console.log(key);
}

Вы получите кучу просмотров, потому что в MooTools изменяет массив прототипа. Вам придется сделать метод hasOwnProperty проверить для каждого свойства, только чтобы избежать этих ловушек. Не для...В О что угодно, но не объекты.

Далее, объявив , что я переменную внутри Для...в цикле создает иллюзию блок рамки. Это не так, поскольку я доступна в любой точке функции после того, как он был определен. Только есть контекст в JavaScript. Вот такие мысли Крокфорд через "...хорошие части" (стр. 102):


В большинстве языков, это обычно лучше объявлять переменные на первом месте использовать. Это оказалось плохой практики в JavaScript, потому что он не имеет области видимости блока. Лучше объявить все переменные в верхней части каждой функции.

Наконец, устанавливая атрибуты для каждого тега script не нужно. Поскольку вы уже взаимодействует с DOM, установив их кузен, собственность дом-это идея получше. Дом предоставляет ярлыки для узла свойства и является более стабильным, чем установка атрибутов. получить/установить/removeattribute осуществляет все есть печальный недостаток очень странно в различных интернет-обозревателе построений. Они лучше избегать, если нужно.

Фиксированный + оптимизировано:

function async_init() {
var element;
var parent = document.body;
var cdn = ["http://code.jquery.com/jquery-1.6.2.js", "https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.14/jquery-ui.js"];
var i = 0, file;
for (i;i<cdn.length;i++) {
file = cdn[i];
element = document.createElement("script");
element.type = "text/javascript";
element.src = file;
parent.appendChild(element);
//free file's value
file = null;
}
/*
* Cleanup at end of function, which isn't necessary unless lots of memory is being
* used up.
* No point nulling a Number, however. In some ECMAScript implementations
* (ActionScript 3), this throws a warning.
*/
//empty array
cdn.splice(0, cdn.length);
//clear variable values
element = null;
parent = null;
cdn = null;
}

Также обратите внимание, что поскольку вы добавляете эти скрипты асинхронно, нет стабильный способ, чтобы определить, когда файл был загружен, кроме загрузчика скрипта или таймер (мое мнение, не стабильный).

Альтернативой является использование документа.пишу , чтобы добавить эти скрипты synchonously. Однако, вы должны будете использовать в виде domstring. и бежать вперед слеш в конце тега скрипта. Это позволит добавить его в конец тега body.

Пример: документ.писать("