Свойства и методы универсального класса Object
Как уже отмечалось, все объекты в JavaScript наследуют свойства и методы класса Object. При этом специализированные классы объектов, как, например, те, что создаются с помощью конструкторов Date() или RegExp(), определяют собственные свойства и методы, но все объекты независимо от своего происхождения помимо всего прочего поддерживают свойства и методы, определенные классом Object. По причине их универсальности эти свойства и методы представляют особый интерес.
à Свойство constructor
В JavaScript любой объект имеет свойство constructor, которое ссылается на функцию-конструктор, используемую для инициализации объекта. Например, если объект d создается с помощью конструктора Date(), то свойство d.constructor ссылается на функцию Date:
var d = new Date( );
d.constructor == Date;// Равно true
Функция-конструктор определяет категорию, или класс, объекта, поэтому свойство constructor может использоваться для определения типа любого заданного объекта. Например, тип неизвестного объекта можно выяснить таким способом:
if ((typeof o == "object") && (o.constructor == Date))
//Какие-то действия с объектом Date...
Проверить значение свойства constructor можно с помощью оператора instanceof, т. е. приведенный фрагмент можно записать несколько иначе:
if ((typeof o == "object") && (o instanceof Date))
à Метод toString()
Метод toString() не требует аргументов; он возвращает строку, каким-либо образом представляющую тип и/или значение объекта, для которого он вызывается.
Интерпретатор JavaScript вызывает этот метод объекта во всех тех случаях, когда ему требуется преобразовать объект в строку. Например, это происходит, когда используется оператор + для конкатенации строки с объектом, или при передаче объекта такому методу, как alert() или document.write().
Метод toString() по умолчанию не очень информативен. Например, следующий фрагмент просто записывает в переменную s строку "[object Object]":
var s = { x:1, y:1 }.toString( );
Этот метод по умолчанию не отображает особенно полезной информации, поэтому многие классы определяют собственные версии метода toString(). Например, когда массив преобразуется в строку, мы получаем список элементов массива, каждый из которых преобразуется в строку, а когда в строку преобразуется функция, мы получаем исходный код этой функции.
à Метод toLocaleString()
В ECMAScript v3 и JavaScript 1.5 класс Object в дополнение к методу toString() определяет метод toLocaleString(). Назначение последнего состоит в получении локализованного строкового представления объекта. По умолчанию метод toLocaleString(), определяемый классом Object, никакой локализации не выполняет; он всегда возвращает в точности такую же строку, что и toString(). Однако подклассы могут определять собственные версии метода toLocaleString(). В ECMA-Script v3 классы Array, Date и Number определяют версии метода toLocaleString(), возвращающие локализованные значения.
à Метод valueOf()
Метод valueOf() во многом похож на метод toString(), но вызывается, когда интерпретатору JavaScript требуется преобразовать объект в значение какого-либо элементарного типа, отличного от строки, – обычно в число. Интерпретатор JavaScript вызывает этот метод автоматически, если объект используется в контексте значения элементарного типа. По умолчанию метод valueOf() не выполняет ничего, что представляло бы интерес, но некоторые встроенные категории объектов переопределяют метод valueOf() (например, Date.valueOf()).
à Метод hasOwnProperty()
Метод hasOwnProperty() возвращает true, если для объекта определено не унаследованное свойство с именем, указанным в единственном строковом аргументе метода. В противном случае он возвращает false. Например:
var o = {};
o.hasOwnProperty("undef"); // false: свойство не определено
o.hasOwnProperty("toString"); // false: toString – это унаследованное свойство
Math.hasOwnProperty("cos"); // true: объект Math имеет свойство cos
Метод hasOwnProperty() определяется стандартом ECMAScript v3 и реализован в JavaScript 1.5 и более поздних версиях.
à Метод propertyIsEnumerable()
Метод propertyIsEnumerable() возвращает true, если в объекте определено свойство с именем, указанным в единственном строковом аргументе метода, и это свойство может быть перечислено циклом for/in. В противном случае метод возвращает false. Например:
var o = { x:1 };
o.propertyIsEnumerable("x");//true: свойство существует
//и является перечислимым
o.propertyIsEnumerable("y");// false: свойство не существует
o.propertyIsEnumerable("valueOf"); //false: свойство неперечислимое
Метод propertyIsEnumerable() определяется стандартом ECMAScript v3 и реализован в JavaScript 1.5 и более поздних версиях.
à Метод isPrototypeOf()
Метод isPrototypeOf() возвращает true, если объект, которому принадлежит метод, является прототипом объекта, передаваемого методу в качестве аргумента. В противном случае метод возвращает false. Например:
var o = {};
Object.prototype.isPrototypeOf(o); //true: o.constructor == Object
Object.isPrototypeOf(o);// false
o.isPrototypeOf(Object.prototype);// false
Function.prototype.isPrototypeOf(Object);// true: Object.constructor == Function
Дата добавления: 2015-08-01; просмотров: 874;