![]() |
||
|
aranea.ru || JavaScript - Введение | Продвинутое создание объектов
Продвинутое создание объектов.Использование конструкторов для создания объектовВ JavaScript используются конструкторы для создания и построения класса объектов. Конструктор применяется с оператором new. Он возвращает то, что сконструировано. Специальный случай для конструктора функции (Function constructor) позволяет создавать анонимные функции (anonymous). Анонимная функция – это функция без имени. Вы можете использовать конструктор функций для построения их на лету("on the fly"), например, одна функция инструкций находится внутри другой. Такая функция, которая вызывается только из одного места, не имеет имени. В следующем примере, такая анонимная функция генерирует одну строку со списком "name-and-email-address". Она проверяет значение переменной firstNameFirst для решения, разместить ли первым имя или адрес электронной почты, а - значение переменной emailNameFirst для решения разместить ли первым имя или адрес электронной почты. Пример допускает, что значения firstNameFirst и emailNameFirst устанавливаются где-то в другом месте. for (j = 1; j < addressList[length]; j++) { oneListingLine = new Function(emailNameFirst, firstNameFirst, addressList, j, theName = new Function(firstNameFirst, addressList, j, var theName=(addressList[j].firstName + addressList[j].lastName); if(firstNameFirst) { theName=(addressList[j].firstName + addressList[j].lastName); },) ; if (emailNameFirst) { theListing = addressList[j].emailName+ ":\t" + theName } else theListing = theName + ":\t" + addressList[j].emailName; return theListing;) document.write(oneListingLine + "<br>"); } Написание конструкторовДля написания вашего собственного конструктора, используйте ключевое слово this внутри конструктора для обращения к заново создаваемому объекту. Конструктор инициализирует объект. Хотя конструктор в следующем примере начинается с индекса 0, это не обязательно. Вы можете начать первый индекс с 1, если, например, хотите, чтобы параметр включал бы фактическое число индексов массива или объекта. В следующем примере, вызывается extent для различения параметра от длинны, поддерживаемой автоматически во встроенном объекте Array( ). Если вы пишете код, который добавляет свойства массиву, то вам надо обновить параметр extent (или эквивалентный), так как этот параметр не поддерживается в JavaScript. Обратите внимание, что даже этот очень простой пример использует и объектную (с точкой), и массивную (квадратные скобки) запись для обращения к текущему объекту. function MakeStringArray(length) { this.extent = length; for (iNum = 0; iNum < length; i++) { this[iNum] = ""; } } // Используйте конструктор для создания и инициализации массива. myStringArray = new MakeStringArray(63); Использование прототипов для создания объектовКогда пишете определение объекта, вы можете использовать свойства prototype (прототипа) для создания свойств, которые сохраняются всеми объектами, которые генерируются определением. Свойства прототипа копируются по ссылке в каждом объекте класса, так что они имеют то же значение для всех объектов в классе. Но, вы можете изменить значение свойства прототипа в одном объекте, и новое значение замещает значение по умолчанию, но только в этом одном случае. Другие объекты, которые являются членами класса, не подвергаются изменениям. Используя этого принципа, вы можете определить дополнительные свойства для объектов, которые являются частью языка JavaScript, и которые все имеют прототипы. Например, если вам нужна специальная константа для расчета, а константа отсутствует среди предоставленных объектов Math и Number, то вы можете определить ее сами, и затем присвоить ей соответствующие объектные прототипы, или свойство прототипа класса вашего объекта. Math.prototype.Avogadro = 6.0232E23; function howManyMolecules(wtGrams,molWt) { return ((wtGrams/molWt)*Math.prototype.Avogadro); } document.write("There are " + howManyMolecules(window.prompt("How many grams?",0),window.prompt ("What's the molecular weight?",0)) + " molecules in that amount."); Дополнительно, вы можете определить функцию, присвоив ей строку-прототип (String.prototype) как метод и использовать ее в любой строке вашей программы. Следующий пример допускает существование массива "Периодической таблицы", называемого "theElements", определенного где-то в программе, который содержит символы для элементов, их имен, их атомных весов и для другой информации, связанной с ними. function atomName(theSymbol) { return(theElements[theSymbol].fullName); } String.prototype.atomName = atomName; function decodeFormula(theFormula) { var theCurrentPiece = ""; var theDecodedFormula = ""; for (i = 1; i = theFormula.length ; i++); if (theFormtheCurrentPiece // Операторы кода для разделения строки формул в массив символов и чисел. // Цикл через массив формул и сборка декодированных строк. Каждый термин является: theDecodedFormula += formula[n].number theDecodedFormula += " "; theDecodedFormula += formula[n].symbol.prototype.atomName; theDecodedFormula += " " // Конец цикла. return theDecodedFormula; } decodeFormula(window.prompt("Formula?","Al2O3")); |