Object это примитивный тип объекта JavaScript. Все объекты JavaScript
являются потомками Object. То есть все объекты JavaScript имеют
методы, определённые для Object.
Объект ядра
Реализован в
JavaScript 1.0: метод toString.
JavaScript 1.1, NES 2.0: добавлены методы eval и valueOf;
свойство constructor.
JavaScript 1.2: не рекомендуется использовать метод eval.
Добавляет точку наблюдения/watchpoint в свойство объекта.
constructor
Специфицирует функцию, которая создаёт прототип объекта. Обратите внимание, что
значением этого свойства является ссылка на функцию, а не строка, содержащая имя функции.
Все объекты наследуют свойство constructor из их prototype:
o = new Object // или o = {} в JavaScript 1.2 o.constructor == Object a = new Array // или a = [] в JavaScript 1.2 a.constructor == Array n = new Number(3) n.constructor == Number
Хотя Вы и не можете конструировать большинство объектов HTML, Вы можете делать
сравнения. Например,
document.constructor == Document document.form3.constructor == Form
Примеры
Создаётся прототип Tree и объект этого типа - theTree.
Затем выводится свойство constructor объекта theTree.
function Tree(name) { this.name=name } theTree = new Tree("Redwood") document.writeln("<B>theTree.constructor is</B> " + theTree.constructor + "<P>")
На выходе будет:
theTree.constructor is function Tree(name) { this.name = name; }
eval
Не рекомендуется. Вычисляет строку кода JavaScript в контексте специфицированного объект.
JavaScript 1.2, NES 3.0: не рекомендуется как метод объектов; оставлен как
функция верхнего уровня/top-level function.
Синтаксис
eval(string)
Параметры
string
Любая строка, представляющая выражение, оператор или последовательность
операторов JavaScript. Выражение может содержать переменные и свойства существующих объектов.
Описание
eval как метод объекта Object и каждого объекта, происходящего от Object,
не рекомендуется применять. Используйте функцию верхнего уровня eval.
Обратная Совместимость
JavaScript 1.1. eval это метод объекта Object и каждого объекта, происходящего от Object.
Представляет прототип для данного класса. Вы можете использовать prototype для
добавления свойств или методов во все экземпляры класса. См. дополнительно Function.prototype.
Каждый объект имеет метод toString, который автоматически
вызывается, если объект представляется как текстовое значение или если на объект
ссылаются при конкатенации строк. Например, следующие примеры требуют, чтобы theDog
был представлен как строка:
document.write(theDog) document.write("The dog is " + theDog)
По умолчанию метод toString наследуется каждым объектом - потомком
объекта Object. Вы можете переопределить этот метод для создаваемых
Вами специальных объектов. Если Вы не переопределяете toString в
специальном объекте, toString возвращает [object type],
где type это тип объекта или имя функции-конструктора, которая создаёт объект.
Например:
var o = new Object() o.toString // возвращает [object Object]
Встроенные методы toString.
Каждый встроенный объект ядра JavaScript переопределяет метод toString
объекта Object для возвращения соответствующего значения. JavaScript
вызывает этот метод везде, где необходимо конвертировать объект в строку.
Некоторые встроенные объекты серверного и клиентского JavaScript не
переопределяют метод toString объекта Object. Например, для Image-объекта sealife,
определённого ниже, sealife.toString() возвратит [object Image].
Переопределения метод toString по умолчанию.
Вы можете создать функцию, вызываемую вместо метода toString по
умолчанию. Метод toString не принимает аргументов и должен
возвращать строку. Создаваемый Вами метод toString может иметь
любое значение, но оно будет более употребимым, если будет содержать информацию об объекте.
Следующий код определяет тип объектов Dog и создаёт theDog, объект типа Dog:
function Dog(name,breed,color,sex) { this.name=name this.breed=breed this.color=color this.sex=sex }
theDog = new Dog("Gabby","Lab","chocolate","girl")
Если Вы вызываете метод toString в этом специальном объекте, он
возвращает значение по умолчанию, унаследованное от Object:
theDog.toString() //возвращает [object Object]
Следующий код создаёт функцию dogToString, которая будет
использована для переопределения метода toString по умолчанию. Эта
функция генерирует строку, содержащую каждое свойство, в форме "property = value;".
function dogToString() { var ret = "Dog " + this.name + " is [\n" for (var prop in this) ret += " " + prop + " is " + this[prop] + ";\n" return ret + "]" }
Следующий код присваивает определённую пользователем функцию методу toString объекта:
Dog.prototype.toString = dogToString
После этого в любое время, когда theDog используется в строковом
контексте, JavaScript автоматически вызывает функцию dogToString,
которая возвращает следующую строку:
Dog Gabby is [ name is Gabby; breed is Lab; color is chocolate; sex is girl; ]
Метод toString объекта обычно вызывается JavaScript, но Вы можете и
сами вызвать его:
var dogString = theDog.toString()
Обратная Совместимость
JavaScript 1.2.
Поведение метода toString зависит от того, специфицирован ли
атрибут LANGUAGE="JavaScript1.2" в тэге <SCRIPT>:
Если LANGUAGE="JavaScript1.2" специфицирован в тэге <SCRIPT>,
метод toString возвращает литерал объекта.
Если LANGUAGE="JavaScript1.2" в тэге <SCRIPT>
не специфицирован, метод toString возвращает [object type],
как и в других версиях JavaScript.
Примеры
Пример 1: Объект location. Печатается строковой эквивалент текущего location.
document.write("location.toString() is " + location.toString() + "<BR>")
Вывод будет таким:
location.toString() is file:///C|/TEMP/myprog.html
Пример 2: Объект без строкового значения. Предположим, у Вас имеется Image-объект sealife,
определённый так:
Отладчик JavaScript имеет функциональность, похожую на функциональность,
предоставляемую этим методом, а также другие опции отладки. Об отладчике см. Getting Started with Netscape JavaScript Debugger.
По умолчанию этот метод наследуется каждым объектом - потомком объекта Object.
JavaScript вызывает метод valueOf для конвертации объекта в
примитивное значение. Вам редко нужно будет вызвать метод valueOf
самостоятельно; JavaScript автоматически вызывает его при обнаружении объекта,
где ожидается примитивное значение.
По умолчанию метод valueOf наследуется каждым объектом - потомком
объекта Object. Каждый встроенный объект ядра языка переопределяет
этот метод, чтобы возвращать соответствующее значение. Если объект не имеет
примитивного значения, valueOf возвращает сам объект, который выводится так:
[object Object]
Вы можете также использовать valueOf в Вашем коде для конвертации
встроенного объекта в примитивное значение. Если Вы создаёте специальный объект,
Вы можете переопределить Object.valueOf для
вызова специального метода вместо метода по умолчанию объекта Object .
Переопределение valueOf для специальных объектов.
Вы можете создать функцию, вызываемую вместо метода по умолчанию valueOf.
Ваша функция обязана не принимать никаких аргументов.
Предположим, у вас есть тип объектов myNumberType и Вы хотите
создать метод valueOf для него. Следующий код присваивает
определённую пользователем функцию методу valueOf объекта:
myNumberType.prototype.valueOf = new Function(functionText)
После этого всегда при вызове объекта типа myNumberType,
используемого в контексте, где необходимо представление в виде примитивного
значения, JavaScript автоматически вызывает функцию, определённую в предыдущем коде.
Метод valueOf объекта обычно вызывается JavaScript, но вы и сами
может вызвать его:
myNumber.valueOf()
ПРИМЕЧАНИЕ:
Объекты в строковом контексте конвертируются с помощью метода toString,
который отличается от конвертирования String-объектов в
строковые примитивы с использованием метода valueOf. Все
строковые объекты имеют строковую конверсию, если только "[object type]".
Но многие объекты не конвертируются в number, boolean или function.
Наблюдает за свойством по имени prop в данном объекте, вызывая handler(prop, oldval, newval),
когда prop устанавливается и сохраняет return-значение в этом
свойстве. Метод watchpoint может фильтровать (или обнулять) значение, возвращая
модифицированное newval (или oldval).
Если Вы удалили свойство, для которого watchpoint был установлен, это watchpoint
не исчезает. Если Вы позднее воссоздаёте свойство, watchpoint всё ещё продолжает действовать.
Чтобы удалить watchpoint, используйте метод unwatch.
По умолчанию метод watch наследуется каждым объектом - потомком объекта Object.
Отладчик JavaScript имеет функциональность, похожую на функциональность,
предоставляемую этим методом, а также другие опции отладки. Об отладчике см. .
Пример
<script language="JavaScript1.2"> o = {p:1} o.watch("p", function (id,oldval,newval) { document.writeln("o." + id + " changed from " + oldval + " to " + newval) return newval })
o.p = 2 o.p = 3 delete o.p o.p = 4
o.unwatch('p') o.p = 5
</script>
Этот скрипт даст на выходе:
o.p changed from 1 to 2 o.p changed from 2 to 3 o.p changed from 3 to 4