Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   немного глубже о .toString() (https://javascript.ru/forum/misc/25055-nemnogo-glubzhe-o-tostring.html)

trikadin 24.01.2012 10:35

Ну, наверное, вы правы...

B~Vladi 24.01.2012 13:17

Цитата:

Сообщение от trikadin
Ну, наверное, вы правы...

Не наверное, а прав.
Но классы могут быть реализованы в других окружениях, яркий тому пример - ant. Там можно запускать JavaScript код и работать с Java-классами.

DreamTheater 24.01.2012 13:26

B~Vladi, а можете рассказать поподробнее на эту тему?

B~Vladi 24.01.2012 14:28

Цитата:

Сообщение от DreamTheater
а можете рассказать поподробнее на эту тему?

На какую тему?

DreamTheater 24.01.2012 15:51

О JavaScript и Ant.

B~Vladi 24.01.2012 16:16

В ант, посредством тега script, можно выполнять JavaScript код.

Для таких скриптов доступна некая базовая объектная модель. В частности, доступен глобальный объект this, в котором хранятся все переменные, определённые в текущем коде скрипта. Так же в нем доступны объекты задач из текущего ant-файла, для которых установлен атрибут id.
Так же можно получить объект проекта через свойство project или имя проекта (значение атрибута name тега project).

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

Для обращения к конкретному классу, он сначала должен быть импортирован, например:
importClass(java.io.File);


К примеру, класс объекта проекта можно получить так:
importClass(org.apache.tools.ant.Project);

Теперь в глобальной области доступен класс Project.

Свойства экземпляра этого класса описаны здесь.

Либо импорт пакета:
importPackage(java.io);


Для каждой задачи (тега) ant определён свой класс, который наследует от более абстрактных классов, что можно посмотреть в мануале. Кстати, последняя версия ant - 1.8.2, а документация к API существует только для 1.7.1. Но ни что не мешает заглянуть в исходники, особенно при возникновении трудностей.

Так как это не обычные JS-объекты, а самые настоящие классы и их экземпляры, то и поведение у них соответствующее. Самое основное то, что нельзя присвоить экземпляру класса новое свойство. Так же нельзя вызвать метод с другими типами аргументов или их с отсутствием, так как этот набор жестко определён. Вообще, это уже чистая Java.

B~Vladi 24.01.2012 16:24

Пример парсинга json для наглядности:
importClass(java.io.File);
importClass(java.io.FileReader);
importClass(java.io.BufferedReader);

var configFile = new File('config.json');

if (!configFile) {
	throw new Error('Can not find configuration file in "' + basedir + File.separator + 'config.json"');
}

var buffer = new BufferedReader(new FileReader(configFile)),
	cfgString = '',
	line;

while (line = buffer.readLine()) {
	cfgString += line;
}

var CONFIG = eval('(' + cfgString + ')');

B~Vladi 24.01.2012 16:27

А, да, забыл добавить ссылку на интерпретатор javascript: http://www.mozilla.org/rhino/doc.html

FINoM 25.01.2012 04:19

Цитата:

Сообщение от Gvozd
Object - функция-конструктор объектов типа Object

Рекурсивный вынос мозга. Курица или яйцо?

trikadin 25.01.2012 07:44

Цитата:

Сообщение от FINoM
Рекурсивный вынос мозга. Курица или яйцо?

Эм. А где рекурсия-то?)


Часовой пояс GMT +3, время: 15:37.