Позавчера пользователь сети оставил мне сообщение с вопросом: что такое Object? Поскольку последние два дня я был занят реконструкцией элемента управления TreeView, мне очень жаль, что я не ответил вовремя. Уделите сегодня немного времени, чтобы взглянуть на то, что такое Object в JavaScript? Какая связь между объектом и функцией? Я приветствую поправки, если я ошибаюсь.
Хотя это личное сообщение, я надеюсь, что вы не будете винить меня, если отправите его анонимно. Если что-то не так, пожалуйста, дайте мне знать.
Что такое объект js?
Сначала я думал, что Object — это прототип всех объектов в js.
Но: alert(Object.constructor) отображает функцию Function...
Это значит, что прототипом Object является Function?
Но проблема возникает снова:
Function.prototype.read=function(){};//Прототип расширенной функции
for(var i in Object)alert(i)//отображает чтение, что дополнительно подтверждает, что прототипом объекта является Function
Object.prototype.read=function(){};//расширяет прототип объекта
for(var i in Function)alert(i)//Отображение чтения, прототипом функции является Object? ? ? ?
Что такое Объект? Являются ли объект и функция как классы одним и тем же?
Этот друг перепутал конструктор, прототип и функцию, потому что JavaScript — это объектно-ориентированный язык (JavaScript не содержит соответствующих классов). На самом деле можно сказать, что объект является прототипом всех объектов, но это относится к концепции прототипа в шаблоне прототипа в шаблоне проектирования, а не к функции языка прототипов JavaScript, называемой Object.prototype.
Так что же такое Object в JavaScript? В Script56.chm (официальном руководстве по M$) говорится: Предоставляет общие функции для всех объектов JScript. Ну, ты понимаешь? Потому что я должен понять, но я всё равно, кажется, не понимаю @_@. Если мы посмотрим на структуру данных, объект (экземпляр Object) представляет собой неупорядоченную коллекцию, структуру, похожую на карту в C++, хеш-таблицу в C# и хеш-карту в Java. И он содержит примитивное значение, присвоенное языковой системой JavaScript. Что это значит? У объекта есть метод valueOf, его функция — вернуть исходное значение указанного объекта. Это также можно найти в Script56, а также есть таблица, в которой перечислены результаты возврата valueOf системных объектов. Другими словами, такие объекты, как Array, Boolean, Date, Function, Number и т. д., на самом деле происходят от Object, и все их предки являются Object. Они представляют различные функции языка. Например, Array имеет автоматически управляемый атрибут длины, Boolean имеет только значения true или false, Date представляет структуру времени, а Function может быть запущена. Все это возможности, предоставляемые им их исходным типом (valueOf). ). На самом деле объект — это всего лишь концепция. Язык JavaScript основан на объектах, а это означает, что все встроенные типы абстрагируются от набора общих методов и свойств (также называемых поведениями и состояниями). эти характеристики и есть Объект. На самом деле Object не очень полезен в программировании. Мы все используем экземпляр объекта Object, а затем используем функцию сбора объекта (expando), чтобы расширить объект до того, что мы хотим. Для Object.prototype это на самом деле не очень полезно, поскольку каждый конкретный тип имеет свой прототип, а большинство добавляемых нами методов-прототипов предназначены для определенных типов.
Помимо прототипа, у Object есть еще очень важный атрибут — конструктор. Эта штука используется для завершения расширения объекта, о котором я упоминал ранее. Она также является основой для использования JavaScript для моделирования ООП. Поскольку все в JavaScript является объектом, конструктор тоже, но его исходный тип — Function (запустите Object.constructor.valueOf(), чтобы получить: function Function() { [собственный код] }). Конечно, и наоборот, не все объекты JavaScript имеют атрибут конструктора, а некоторые встроенные объекты не имеют конструктора.
Что касается связи между объектом и функцией, я думаю, что это не очень хороший тестовый код: Function.prototype.read=function(){};//Прототип расширенной функции
for(var i in Object)alert(i)//отображает чтение, что дополнительно подтверждает, что прототипом объекта является Function
Object.prototype.read=function(){};//расширяет прототип объекта
for(var i in Function)alert(i)//Отображение чтения, прототипом функции является Object?
Эти четыре строки кода используются для объяснения принципа прототипа JavaScript и моделирования метода наследования прототипов объектно-ориентированного программирования. Однако они не могут четко объяснить связь между объектом и функцией: (Наоборот, они обманут. аудитории.
Давайте кратко опишем каждую из различных функций в типах объектов JavaScript:
Собственный объект: объекты, предоставляемые языком JavaScript, которые не зависят от хоста выполнения. Некоторые из них являются встроенными объектами, например Global и Math; некоторые создаются и используются в среде выполнения сценария, например: Array, Boolean. , Дата, Функция, Число, Объект, RegExp, Ошибка.
Встроенный объект: встроенные объекты, предоставляемые языком JavaScript, которые не зависят от хоста выполнения, такие как встроенные объекты Global и Math, являются собственными объектами.
Хост-объект: любой объект, предоставляемый языком JavaScript, который зависит от хост-среды. Все объекты, не являющиеся собственными объектами, являются хост-объектами, например: окно в IE, экземпляр wscript в WScript, любой созданный пользователем класс.