В процессе разработки мы часто сталкиваемся с необходимостью создания множества похожих объектов, которые могут иметь множество одинаковых свойств или методов. Итак, каковы же нам методы создания нескольких объектов? Какой метод лучше всего? Давайте посмотрим вместе!
Литеральный метод объекта — один из наиболее распространенных способов создания объектов. Свойства объектов, созданных с помощью литерального метода, по умолчанию доступны для записи, перечисления и настройки.
Следующий код показывает, как создать несколько объектов с помощью литеральных методов:
//Создать несколько объектов с помощью литеральных методов var person1 = { название: 'варенье', возраст: 18, адрес: «Город Шанхай», еда: функция () { console.log(this.name + 'Еда') } } вар person2 = { имя: 'Том', возраст: 20, адрес: «Город Пекин», еда: функция () { console.log(this.name + 'Еда') } } вар person3 = { название: 'известкование', возраст: 19, адрес: «Город Тяньцзинь», еда: функция () { console.log(this.name + 'Еда') } }
经过上述示例代码我们可以看出,仅仅创建了3个对象就用了24行,可以看出字面量方式的弊端:创建同样的对象时,需要编写重复的代码太多。
Фабричный шаблон на самом деле является распространенным шаблоном проектирования;
Обычно у нас есть фабричный метод, с помощью которого мы можем генерировать нужные объекты;
следующий код показывает операцию использования метода фабричного режима для создания нескольких объектов:
//Создаем несколько объектов с помощью фабричной функции function createPerson (имя, возраст, адрес). ) { вар п = {} п.имя = имя п.возраст = возраст p.адрес = адрес p.eating = функция () { console.log(имя + «Еда») } вернуть р } var p1 = createPerson('jam', 19, 'Шанхай') var p2 = createPerson('tom', 14, 'Пекин') var p3 = createPerson('li', 13, 'Город Тяньцзинь') p3.eating() // Когда li ест,
可以看出使用工厂模式方法创建了三个对象使用的代码明显比字面量少了好多行,but这就是最好的方式了吗?NO! NO! NO!
工厂模式方法的**弊端**就在于:以上述示例代码为例。当我们打印p1,p2,p3后,获取不到对象最真实的类型,比如p1是人还是动物还是工具
Constructor Я думаю, что все знакомы
.это. Так называемая функция-конструктор — это функция, которая предоставляет шаблон для создания объекта и описывает базовую структуру объекта. Конструктор может генерировать несколько объектов, каждый из которых имеет одинаковую структуру.
Следующий код показывает использование метода конструктора для создания нескольких объектов:
// Традиционная спецификация, первая буква имени конструктора пишется с заглавной function Person (имя, возраст, адрес) { это.имя = имя this.age = возраст этот.адрес = адрес this.eating = функция () { console.log(this.name + 'Еда') } this.running = функция () { console.log(this.name + 'работает') } } var p1 = новый человек('варенье', 20, 'Пекин') var p2 = new Person('tom', 14, 'Город Шанхай') var p3 = новый человек('li', 13, 'Город Тяньцзинь') консоль.log(p1) // Результаты вывода // Person { // имя: 'варенье', // возраст: 20, // адрес: 'Пекин', // еда: [Функция], // работает: [Функция] // } p1.eating() // У Jam
构造函数有个不成文的规范,那就是构造函数的名字首字母大写或者驼峰。
构造函数方式并不是最完美的创建多个对象的方式,也是有缺点的。
缺点:每个方法都要在每个实例上重新创建一遍,比如同样的eating方法和running方法都需要在p1,p2,p3的实例上去创建一遍,浪费很多的内存空间
заключается в определении атрибутов экземпляра в конструкторе, тогда при создании объекта необходимо передавать только эти параметры. Объект-прототип используется для определения методов и общих свойств.
Следующий код показывает, как создать несколько объектов с помощью прототипов и конструкторов:
function Person (имя, возраст, адрес) { это.имя = имя this.age = возраст этот.адрес = адрес это.есть = this.running = функция () { console.log(this.name + 'работает') } } // Добавьте в прототип метод еды и метод запуска, чтобы вам не нужно было добавлять один и тот же метод в память каждый раз, когда вы создаете объект. Person.prototype.eating = function () { console.log(this.name + 'Еда') } Person.prototype.running = функция () { console.log(this.name + 'работает') } var p1 = новый человек('варенье', 20, 'Пекин') var p2 = new Person('tom', 14, 'Город Шанхай') var p3 = новый человек('li', 13, 'Город Тяньцзинь') консоль.log(p1) //Выходной результат: // Человек { // имя: 'варенье', // возраст: 20, // адрес: 'Пекин', // еда: [Функция], // работает: [Функция] // } p1.eating() //
最后的当然是压轴的呀,这种原型和构造函数方式是目前在ECMAScript中使用得最广泛、认同度最高的一种创建对象的方法。