Всем привет, с вами автор блога scriptcoding.ru. Сегодня мы рассмотрим встроенный класс Object, который отвечает за создание JScript объекта.
И так, мы рассмотрим процесс создания внутреннего объекта JS. Я бы не затрагивал эту тему, если бы не одно обстоятельство, просто сейчас я пишу скрипт «Файловый менеджер» на языке JScript, если что не получается то я советуюсь на форуме forum.script-coding.com, так вот, я накинул общий код для менеджера, и показал его на форуме, хотелось просто узнать, насколько правильно я пишу код, как оказалось…код далёк от «идеала«.
Один из форумчан показал свой стиль написания, который резко отличался от моего, а именно, мне были непонятны следующие строки:
data_array.push( { name: "..", ext: "", size: "", date: "", attr: "", path: cur_dir, isfld: null });
С функцией push (класс Array) я познакомился только когда просматривал примеры для класса WindowSystemObject, и считал, что она может добавлять в массив только простые значения. Вот что было у меня прописано:
WObject = new Object() WObject.Name = ".." WObject.Ext = "" WObject.Size = "" WObject.Date = "" WObject.Attrib = "" WObject.Path = CurDir DataL.push(WObject) |
Как видите, отличия есть, просто я учился программировать на языке Pascal, а с C++ познакомился позднее, но проблема не в этом, а в том, что я не мог понять синтаксис вида:
var point ={ x:2.3, y:1.2}; |
Как оказалась, это из области JavaScript, а именно, создание пользовательских JS объектов. И так, какое представление было у меня: язык JScript предоставляет пользователю пять внутренних классов: Array, Math, String, Enumerator и Date, плюс, есть возможность произвести создание собственного — Object, для их объявления используется ключевое слово new, например:
d = new Date(); a = new Array(10); o = new Object() |
Последняя строка создает пользовательский js объект, который будет связан с переменной o.
JS ОБЪЕКТЫ
Хорошо, теперь давайте рассмотрим следующий пример:
//********************************************* // js объекты - JScript //jscript_creat_object.js //******************************************** var JS_OBJECT; var NewFunction; var NewArr; var main_x, main_y; var list_arr; //Класс JS_OBJECT=new Object(); //Функция NewFunction = function (x,y){return x+y;} //Массив NewArr = new Array(2); //Устанавливаем элементы массива NewArr NewArr[0] = 100; NewArr[1] = "Строка кода"; NewArr[2] = "200"; //Присваиваем значения переменным main_x и main_y js object main_x = 25; main_y = 50; //Устанавливаем свойства для JS_OBJECT JS_OBJECT.a1 = main_x; JS_OBJECT.a2 = main_y; JS_OBJECT.a3 = NewArr; JS_OBJECT.a4 = NewFunction; //Переменная list_arr будет хранить элементы JS_OBJECT js object list_arr="Элементы класса JS_OBJECT:\n" for (list in JS_OBJECT){ list_arr+=JS_OBJECT[list] + "\n"; } WScript.Echo(list_arr); //Получаем доступ к свойствам WScript.Echo(JS_OBJECT.a2); WScript.Echo(JS_OBJECT.a3[1]); WScript.Echo(JS_OBJECT.a4(3,5)); |
Пример не есть сложный, тут мы создали JS объект (JS_OBJECT=new Object()), далее присвоили ему свойства a1 и a2, они хранят простые значение, a3 – массив, а a4 – позволяет получить доступ к функции. Цикл for in позволяет получить доступ к свойствам заданного класса. Хорошо, сделали мы создание объект JS (JScript), и вроде всё даже работает, но вот давайте посмотрим на второй пример:
//*********************************************** // js объекты - JScript //1_jscript_creat_object.js //*********************************************** var JsFunction; var JsArr; //Присваиваем значения переменным main_x и main_y var main_x = 25, main_y = 50; //Переменная list_arr будет хранить элементы объекта js_object jscript объекты var list_arr="Элементы объекта js_object:\n" //Функция JsFunction = function (x,y){return x+y;} //Массив, Устанавливаем элементы массива JsArr JsArr = new Array(100,"Строка кода","200"); //Устанавливаем свойства объекта js_object - измененный вариант js создание объекта var js_object = {a1:main_x, a2:main_y, a3:JsArr, a4:JsFunction}; //********************************************************************* //Переменная list_arr будет хранить элементы js_object list_arr="Элементы объекта js_object:\n" for (list in js_object){ list_arr+=js_object[list] + "\n"; } with(WScript){ Echo(list_arr); //Получаем доступ к свойствам js object Echo(js_object.a2); Echo(js_object.a3[1]); Echo(js_object.a4(3,5)); } |
Тут мы использовали такое понятие как объектный литерал:
new_object ={a1:main_x, a2:main_y, a3:new_arr, a4:new_function}; |
Объектный литерал — это список разделенных запятыми пар «свойство:значение«, заключенный в фигурные скобки. Как видим, тут сначала идёт имя свойства, а после двоеточия ему присваивается значение. Переменная будет объектом js, хотя ключевое слово js Object и не используется, что бы в этом убедится, просто вызовите функцию typeof:
WScript.Echo(typeof(new_object)); |
Как видим, второй вариант создания JS объекта более «взрослый», в статье «Объявление пользовательских функций JScript» подобный приём также использовался.
Ну что же, на этом пока все, как дополнение можете рассмотреть «8 урок по VBScript«, где тоже есть похожие примеры, но уже на другом языке программирования