немного глубже о .toString()
Почему Object.toString !== Object.prototype.toString ??
|
console.log(Object.toString === Object.prototype.toString);//false console.log(Object.toString === Function.prototype.toString);//true console.log(Object.toString === Function.toString);//true Object - функция-конструктор объектов типа Object Поэтому ее toString берется из ее прототипа, который общий для всех функций, а не из прототипа объектов. |
Потому что Object это, скажем, "класс", а {} это его экземпляр, соответственно {} получает все свойства Object.prototype.
То бишь в Вашем примере валидно будет написать {}.toString === Object.prototype.toString |
Цитата:
|
Цитата:
|
Цитата:
|
Kolyaj, не, не очень. Объект конструктора Array?
|
Связку конструктор-прототип вполне можно называть классом. В данной же теме акцент именно на том, что Object -- это функция. А что это ещё и конструктор тут неважно.
|
А, окей.
Просто я так и не понял, почему в "javascript нет классов!!!!111" и т.д. |
Цитата:
|
Ну, наверное, вы правы...
|
Цитата:
Но классы могут быть реализованы в других окружениях, яркий тому пример - ant. Там можно запускать JavaScript код и работать с Java-классами. |
B~Vladi, а можете рассказать поподробнее на эту тему?
|
Цитата:
|
О JavaScript и Ant.
|
В ант, посредством тега 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. |
Пример парсинга 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 + ')'); |
А, да, забыл добавить ссылку на интерпретатор javascript: http://www.mozilla.org/rhino/doc.html
|
Цитата:
|
Цитата:
|
Класс Object наследуется от Чака Норриса :D
|
Цитата:
|
Object -- экземпляр Function.
|
Цитата:
UPD Сорри, тупанул. Таки да. Получается тогда что Function сам себе конструктор. |
Цитата:
|
Часовой пояс GMT +3, время: 22:57. |