В този урок ще научите за функцията конструктор на JavaScript с помощта на примери.
В JavaScript конструкторска функция се използва за създаване на обекти. Например,
// constructor function function Person () ( this.name = 'John', this.age = 23 ) // create an object const person = new Person();
В горния пример function Person()
е функция конструктор на обект.
За да създадем обект от конструкторска функция, използваме new
ключовата дума.
Забележка : Счита се за добра практика да пишете с главна буква първата буква от вашата конструкторска функция.
Създайте множество обекти с конструкторска функция
В JavaScript можете да създавате множество обекти от конструкторска функция. Например,
// constructor function function Person () ( this.name = 'John', this.age = 23, this.greet = function () ( console.log('hello'); ) ) // create objects const person1 = new Person(); const person2 = new Person(); // access properties console.log(person1.name); // John console.log(person2.name); // John
В горната програма се създават два обекта с помощта на една и съща конструкторска функция.
JavaScript тази ключова дума
В JavaScript, когато this
ключова дума се използва във функция конструктор, се this
отнася до обекта, когато обектът е създаден. Например,
// constructor function function Person () ( this.name = 'John', ) // create object const person1 = new Person(); // access properties console.log(person1.name); // John
Следователно, когато даден обект осъществява достъп до свойствата, той може директно да осъществи достъп до него като person1.name
.
Параметри на функцията на конструктора на JavaScript
Можете също така да създадете конструктор функция с параметри. Например,
// constructor function function Person (person_name, person_age, person_gender) ( // assigning parameter values to the calling object this.name = person_name, this.age = person_age, this.gender = person_gender, this.greet = function () ( return ('Hi' + ' ' + this.name); ) ) // creating objects const person1 = new Person('John', 23, 'male'); const person2 = new Person('Sam', 25, 'female'); // accessing properties console.log(person1.name); // "John" console.log(person2.name); // "Sam"
В горния пример сме предали аргументи на функцията конструктор по време на създаването на обекта.
const person1 = new Person('John', 23, 'male'); const person2 = new Person('Sam', 25, 'male');
Това позволява на всеки обект да има различни свойства. Както е показано по-горе,
console.log(person1.name);
дава Джон
console.log(person2.name);
дава Сам
Създаване на обекти: Функция конструктор Vs Object Literal
- Object Literal обикновено се използва за създаване на единичен обект. Функцията конструктор е полезна, ако искате да създадете множество обекти. Например,
// using object literal let person = ( name: 'Sam' )
// using constructor function function Person () ( this.name = 'Sam' ) let person1 = new Person(); let person2 = new Person();
- Всеки обект, създаден от функцията конструктор, е уникален. Можете да имате същите свойства като функцията конструктор или да добавите ново свойство към един конкретен обект. Например,
// using constructor function function Person () ( this.name = 'Sam' ) let person1 = new Person(); let person2 = new Person(); // adding new property to person1 person1.age = 20;
Сега това age
свойство е уникално за person1
обекта и не е достъпно за person2
обект.
Ако обаче обектът е създаден с обектен литерал и ако променлива е дефинирана с тази стойност на обекта, всяка промяна в стойността на променливата ще промени оригиналния обект. Например,
// using object lateral let person = ( name: 'Sam' ) console.log(person.name); // Sam let student = person; // changes the property of an object student.name = 'John'; // changes the origins object property console.log(person.name); // John
Когато обект се създава с обектен литерал, всяка обектна променлива, получена от този обект, ще действа като клонинг на оригиналния обект. Следователно всяка промяна, която направите в единия обект, ще се отрази и в другия обект.
Добавяне на свойства и методи в обект
Можете да добавяте свойства или методи в обект като този:
// constructor function function Person () ( this.name = 'John', this.age = 23 ) // creating objects let person1 = new Person(); let person2 = new Person(); // adding property to person1 object person1.gender = 'male'; // adding method to person1 object person1.greet = function () ( console.log('hello'); ) person1.greet(); // hello // Error code // person2 doesn't have greet() method person2.greet();
Изход
здравей Uncaught TypeError: person2.greet не е функция
В горния пример към обекта се добавят ново свойство gender
и нов метод .greet()
person1
Това ново свойство и метод обаче се добавят само към person1
. Не можете да получите достъп gender
или greet()
от person2
. Следователно програмата дава грешка при опит за достъпperson2.greet();
Прототип на обект на JavaScript
Можете също да добавяте свойства и методи към конструкторска функция, използвайки прототип . Например,
// constructor function function Person () ( this.name = 'John', this.age = 23 ) // creating objects let person1 = new Person(); let person2 = new Person(); // adding new property to constructor function Person.prototype.gender = 'Male'; console.log(person1.gender); // Male console.log(person2.gender); // Male
За да научите повече за прототипите, посетете JavaScript Prototype.
Вградени конструктори на JavaScript
JavaScript също има вградени конструктори. Някои от тях са:
let a = new Object(); // A new Object object let b = new String(); // A new String object let c = new Number(); // A new Number object let d = new Boolean(); // A new Boolean object
В JavaScript низовете могат да се създават като обекти чрез:
const name = new String ('John'); console.log(name); // "John"
В JavaScript числата могат да се създават като обекти чрез:
const number = new Number (57); console.log(number); // 57
В JavaScript булеви числа могат да бъдат създадени като обекти чрез:
const count = new Boolean(true); console.log(count); // true
Забележка : Препоръчително е да използвате примитивни типове данни и да ги създавате по нормален начин, като const name = 'John';
, const number = 57;
иconst count = true;
Не трябва да декларирате низове, числа и булеви стойности като обекти, защото те забавят програмата.
Забележка : В JavaScript ключовата дума class
е въведена в ES6 (ES2015), която също ни позволява да създаваме обекти. Класовете са подобни на конструкторските функции в JavaScript. За да научите повече, посетете JavaScript класове.