1. Заводская модель
Функция Person (имя, возраст) {var p = new Object (); p.name = name; P.age = возраст; p.showmessage = function () {console.log ("name:"+this.name+"age:"+this.age); } return p;} var p1 = person ("k1", 28); var p2 = person ("k2", 29); console.log (p1.showmessage == p2.showmessage); // false не один и тот же метод Showmessage console.log (p1.constructor); // объект] все объекты.Дефект заводской шаблона заключается в том, что проблема распознавания объектов не решается, а метод ShowMessage каждого объекта не является одним и тем же методом (каждый метод воссоздается на каждом экземпляре объекта), который увеличивает накладные расходы
2. Режим конструктора
Функция человека (имя, возраст) {this.name = name; this.age = возраст; this.showmessage = function () {console.log ("name:"+this.name+"age:"+this.age); }} var p1 = новый человек ("k1", 28); var p2 = новый человек ("k2", 29); console.log (p1.showmessage == p2.showmessage); // ложь не тот же метод Showmessage console.log (p1.constructor); // [человек] консоль.Шаблон конструктора решает проблему распознавания объектов, но метод ShowMessage каждого объекта не является одним и тем же методом (каждый метод воссоздается на каждом экземпляре объекта), который увеличивает накладные расходы
3. Прототип режим
function person () {} person.prototype.name = "k"; person.prototype.age = 29; person.prototype.showmessage = function () {console.log ("name:"+this.name+"Age:"+this.age);}; var p1 = new Person (); Person (); P2.showMessage (); // Имя: K AGE: 29Console.log (p1.showmessage == p2.showmessage); // true -Ссылка на консоль функции. console.log (person.prototype.isprototypeof (p1)); // trueconsole.log (object.getprototypeof (p1) == person.prototype); // trueПрототип шаблона решает проблему «Каждый метод воссоздан на каждом экземпляре объекта», а также решает проблему распознавания объекта.
Большая проблема с режимом прототипа заключается в том, что все объекты, переменные и функции, установленные в соответствии с прототипом функции, используются всеми экземплярами функции. Хотя свойства прототипа можно получить через экземпляры P1 и P2, значение свойства не может быть изменено. Например, p1.name = "k1", он добавляет только свойство name = "k1" в экземпляр P1 и не переходит на Prototype.name. Это нормально, если это тип значения, но если это тип ссылки, будут проблемы. См. Следующий пример
function person () {}; person.prototype.age = 10; person.prototype.array = [1,2,3]; var p1 = new Person (); var p2 = new Person (); console.log (p1.array); // [1,2,3] консоль (); console.log (p1.array); // [1,2,3]] консоли (); //*,2,3^P1.Array.push(4);console.log(p1.array);//[1,2,3,4§console.log(p2.array);//ns1,2,3,4]P1 добавляет значение в массив, что также отражается в P2, потому что все они указывают на один и тот же массив
4. Объединение режима конструктора и прототипа режима
Это наиболее распространенный способ создания объектов, сочетание преимуществ конструкторов и моделей прототипов
Функция человека (имя, возраст) {this.name = name; this.age = age;} person.prototype.showmessage = function () {console.log ("name:"+this.name+"age:"+this.age);}; var p1 = new Person ("k", 30); p1.showmessage ();5. Динамический режим прототипа
Основное решение: инкапсулировать всю информацию в конструкторе, которая в большей степени соответствует идее OO
Функция человека (имя, возраст) {this.name = name; this.age = возраст; if (typeof this.showmessage! = "function") {person.prototype.showmessage = function () {console.log ("name:"+this.name+"Age:"+this.age); }}} var p1 = новый человек ("k", 30); p1.showmessage ();6. Схема паразитического конструктора
Функция Person (имя, возраст) {var O = new Object (); o.name = name; o.age = возраст; o.sayname = function () {console.log (this.name); }; return o;} var p1 = новый человек ("k", 28); p1.sayname ();Паттерн паразитического конструктора точно такой же, как и заводской шаблон, за исключением того, что новое ключевое слово используется при создании объекта. Приведенный выше пример: var p1 = новый человек ("k", 28).
Его основная функция: расширить функции в этом конструкторе. Например, я хочу определить тип массива Myarray, который основан на массиве и имеет свой собственный метод следующим образом
function myarray () {var values = new Array (); values.push.apply (значения, аргументы); // Метод, определенный на себе значения. }; возвращаемые значения;} var colors = new myarray ("red", "blue", "green"); console.log (colors.topipedString ()); console.log (экземпляры цвета массива);7. Стабильный режим конструктора
Безопасный конструктор следует за шаблоном от типа паразитического конструктора, но есть два различия: одно из них не может использовать это, а другой - не использовать новый для вызова конструктора.
Функция Person (имя, возраст) {var O = new Object (); var tempare = возраст; o.name = name; o.age = возраст; o.sayname = function () {console.log (name); } o.sayage = function () {console.log (Tempare); } return o;} var p1 = person ("k1", 28); p1.sayname (); // k1p1.sayage (); // 28p1.name = "k2"; p1.age = 30; p1.sayname (); // k1p1.sayage (); // 28Когда вы видите вывод выше, вы можете понять, что такое схема безопасного объекта. Это объект, созданный с помощью этого режима. Нет другого способа изменить значение, передаваемое во время инициализации. Это человек ("K1", 28). Такой объект является безопасным объектом. На самом деле, это закрытие JavaScript.
Приведенный выше краткий анализ метода создания объекта JavaScript - это весь контент, которым я делюсь с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.