Объяснение в комментариях очень подробно, поэтому я не буду говорить здесь много чушь, просто введите код:
<script type = "text/javascript"> // ecma-262 определяет объект как: «Сборник неупорядоченных атрибутов, чьи атрибуты могут содержать основные значения, объекты или функции» // Самый простой способ понять объект-создать экземпляр объекта и добавить атрибуты и методы к его человеку = новый объект (); person.name = "xulei"; Person.age = "23"; Person.job = "Front-End Engineer"; person.sayname = function () {alert (this.name); } // Вы также можете написать var person = {name: "xulei", возраст: 23, job: "Front-end Engineering", sayname: function () {alert (this.name)}} // 1. Тип атрибута: атрибут данных и доступ к его атрибуту // 1. Атрибут данных, существует 4 характеристики, которые описывают его поведение // [настраивается]: указывает, можно ли изменить атрибут, можно ли изменить атрибут на атрибут доклада, значение по умолчанию является истинным // [подсчитано]: указывает на то, что атрибут может быть возвращен через модульное значение, но атрибут, но атрибут, но атрибут, но атрибут, но атрибут, является атрибут, но атрибут, но атрибут. Значение по умолчанию - true // [значение]: содержит значение данных этого атрибута. Значение по умолчанию - неопределенное здесь var person = {name: "xulei"} // объект человека создается здесь, а значение значения - "xulei" // для изменения свойств свойства по умолчанию, объект ecmascript5.definepropert {} Object.defineproperty (peron, "name", {writeable: false, // свойство не может быть изменено значение: "xu lei-xulei"}); alert (peron.name); // xu lei-xulei peron.name = "xu lei"; Alert (peron.name); // xu lei-xulei // вышеуказанные операции будут проигнорированы в нестрадном режиме. Если исключение брошено в строгом режиме // после того, как атрибут определяется как невыполненное, его нельзя превратить в настраиваемое. // В большинстве случаев нет необходимости использовать эти расширенные функции, предоставленные методом Object.DefineProperty (). Но это очень полезно для понимания JavaScript. // Читателям рекомендуется не использовать этот метод на IE8. // 2. Доступ к его свойствам имеет 4 характеристики // [настраивается]: указывает, можно ли изменить атрибут, можно ли изменить атрибут, можно ли изменить атрибут на атрибут доклада, значение по умолчанию является истинным // [upumerable]: указывает на то, что атрибут может быть возвращен к значению по умолчанию //: Undefined // [set]: значение по умолчанию функции, называемой при написании атрибута undefined var book = {_year: 2004, издание: 1} obj }); Book.year = 2005; Alert (book.edition); // 2 // Создать объект // 1. Относиться к конструктору как к функциональному человеку (имя, возраст, задание) {this.name = name; this.age = возраст; this.job = job; this.sayname = function () {alert (this.name); }} // Использовать var person = new Person ("xulei", 23, "Software"); person.sayname (); // Использование человека ("xulei2", 23, "job2"); // добавить в window.sayname (); // вызовы var в область другого объекта o = new Object (); Person.call (o, "xulei3", 23, "job3"); o.sayname (); </script>Давайте получим еще один абзац:
<script type = "text/javascript"> // 1. Понять объект прототипа // 2. Прототип и в операторе // 3. Более простой прототип синтаксис // 4. Динамичность прототипа // 5. Прототип нативного объекта // 6. Проблемы с объектом прототипа // 1. Всякий раз, когда создается функция, для функции будет создан атрибут прототипа на основе конкретного набора правил. Этот атрибут указывает на объект прототипа функции // По умолчанию, все объекты прототипа автоматически получат атрибут конструктора (конструктор), который содержит указатель на функцию, в которой расположен атрибут прототипа // такой как функция Person () {} //person.prototype.constrictor Points to Person // После создания создания Custome Constructor Obstructor. Что касается других методов, они унаследованы от Object./when Call для создания нового экземпляра, экземпляр содержит указатель (внутреннее свойство), чтобы указывать на объект прототипа конструктора .//in Firefox, Safari и Chrome, Property_proto_access var p1 = новое лицо (); Alert (person.prototype.isprototypeof (p1)) Alert (object.getPrototypeof (p1) == Person.prototype) // Хотя значение, сохраненное в прототипе, можно получить через экземпляр объекта, значение в прототипе не может быть перезаписывается через экземпляр объекта. Если мы добавим свойство // в экземпляр, а имя свойства будет таким же, как и экземпляр в прототипе, то мы создаем свойство в экземпляре, и свойство будет блокировать свойство в прототипе. например: функция Person () {} person.prototype.name = "amber"; Person.prototype.age = 23; Person.prototype.job = "Инженер программного обеспечения"; Person.prototype.sayname = function () {alert (this.name)} var person1 = new Person (); var person2 = new Person (); Person1.name = "amber.xu"; Alert (person1.name); // amber.xu -from alert alert (person2.name); // amber -from прототип Delete person1.name; Alert (person1.name); // amber -из прототипа // Использовать метод hasownproperty () для определения того, существует ли свойство в экземпляре или в прототипе. Этот метод (унаследованный от объекта) // возвращать истинную функцию Person () {} person.prototype.name = "amber"; Person.prototype.age = 23; Person.prototype.job = "Инженер программного обеспечения"; Person.prototype.sayname = function () {alert (this.name)} var person1 = new Person (); var person2 = new Person (); alert (person1.hasownproperty ("name")); // false из alert alert (person2.hasownproperty ("name")); // ложь из экземпляра Person1.name = "amber.xu"; оповещение (Person1.name); Alert (Person1.hasownProperty ("имя")); // true из экземпляра Delete Person1.name; оповещение (Person1.name); Alert (Person1.hasownProperty ("имя")); // ложь из прототипа // 2. Прототип и в операторе // есть два способа его использования, один используется отдельно и в форме. При использовании только оператор возвращает true, когда объект может получить доступ к данному свойству // независимо от того, поступает ли свойство из прототипа или функции экземпляра () {} person.prototype.name = "amber"; Person.prototype.age = 23; Person.prototype.job = "Инженер программного обеспечения"; Person.prototype.sayname = function () {alert (this.name)} var person1 = new Person (); var person2 = new Person (); Alert («Имя» в личном1); // true из оповещения прототипа («Имя» в перси человеке2); // true из оповещения прототипа («высота» («Персона»); // false // Таким образом, вы можете инкапсулировать функцию (независимо от того, является ли это свойство прототип для данного объекта) Функция HasprototypRoperty (объект, имя) {return! } alert("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Returns all Перечисляемые свойства, которые можно получить через объекты, включая как прототип, так и свойства экземпляра. // EG: var O = {toString: function () {return "my object"; Принять объект в качестве аргумента, // строковый массив, содержащий все перечисляемые свойства function person () {} person.prototype.name = "amber"; Person.prototype.age = 23; Person.prototype.job = "Инженер программного обеспечения"; Person.prototype.sayname = function () {alert (this.name)} var person1 = new Person (); var person2 = new Person (); var keys = object.keys (person.prototype); Alert (Keys) Person1.name = "amber.xu"; Person1.age = 23; var keys = object.keys (person1); Блюдо (ключи) тревога("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Название: «Amber», возраст: 23, задание: «Программное обеспечение», Sayname: Function () {alert (this.name)} // После написания этого атрибута конструктора больше не указывает на функцию человека, но на конструктор объекта // можно вернуть Человек) // Истинное оповещение (экземпляры друга объекта) // Истинное оповещение (rows.constructor == Person); // ложное оповещение (row.constructor == Object); // true // Если конструктор действительно важен для вас, вы можете установить его на соответствующее ценность, как функционирует ниже () {} Person.prototype = {Constructor: Person: «amber», aege: SAYNAME: function () {alert (this.name)}} var froty = new Person (); Блюд («Вручную установлена constructor----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // В этом случае вы можете использовать Object.DefineProperty (Person.prototype, «Constructor», {перечисляет: false, значение: человек}); Между экземпляром и прототипом соединение между экземпляром и прототипом является просто указателем, а не копией // Когда мы вызовут метод sayhi (), мы сначала найдем метод с именем Sayhi в экземпляре и поиск прототипа, если он не найден. // Однако, если вы переписываете весь объект прототипа, то ситуация будет другой. // Мы знаем, что при вызове конструктора указатель прототипа на исходный прототип будет добавлен в экземпляр, а изменение прототипа на другой объект эквивалентен отрезанию соединения между конструктором и исходным прототипом. // Помните: указатель в экземпляре только указывает на прототип, а не на конструктор. Например: функция a () {} var a1 = new a (); A.Prototype = {Constructor: A, имя: «Amber», возраст: 23, задание: «Программное обеспечение», sayname: function () {alert (this.name)}} alert("ERROR------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Even all Нативные ссылки создаются с использованием этого шаблона. String.prototype.startswith = function (text) {return this.indexof (text) == 0; }; var msg = "hello"; Alert (msg.startswith ("h")); // Мы не рекомендуем это делать. оповещение («Прототип проблемы с объектом прототипа»); // 6. Пример примера прототипа Ques () {} Ques.prototype = {Constructor: Ques, name: «Amber», возраст: 23, задание: «it», друзья: ["zhang san", "li si"], // ссылочный тип Showername: function () {alert (this.name)}}; var Q1 = new Ques (); var Q2 = new Ques (); Q1.Friends.push ("Wang wu"); Alert (Q1.Friends); // предупреждение (Q2.Friends); // оповещение (Q1.Friends === Q2.Friends); // Я считаю, что все видели проблему. Когда я создал два экземпляра Q1 и Q2, и когда я добавил «Wang Wu» к «друзьям» Q1, «Друзья» Q2 также имели три «Ван Сан, Ли Си и Ван Ву // Это потому, что массив существует в вопросах.Эта статья закончится здесь. Мы будем продолжать обсуждать объектно-ориентированное программирование JavaScript в будущем. Я надеюсь, что все это понравится.