I denne vejledning lærer du om prototyper i JavaScript ved hjælp af eksempler.
Før du lærer prototyper, skal du kontrollere disse tutorials:
- JavaScript-objekter
- JavaScript-konstruktørfunktion
Som du ved, kan du oprette et objekt i JavaScript ved hjælp af en objektkonstruktørfunktion. For eksempel,
// constructor function function Person () ( this.name = 'John', this.age = 23 ) // creating objects const person1 = new Person(); const person2 = new Person();
I ovenstående eksempel function Person()
er en objektkonstruktørfunktion. Vi har skabt to objekter person1
og ud person2
fra det.
JavaScript-prototype
I JavaScript har hver funktion og objekt som standard en egenskab, der hedder prototype. For eksempel,
function Person () ( this.name = 'John', this.age = 23 ) const person = new Person(); // checking the prototype value console.log(Person.prototype); // (… )
I ovenstående eksempel forsøger vi at få adgang til prototypeegenskaben for en Person
konstruktorfunktion.
Da prototypeegenskaben ikke har nogen værdi i øjeblikket, viser den et tomt objekt (…).
Prototype arv
I JavaScript kan en prototype bruges til at tilføje egenskaber og metoder til en konstruktorfunktion. Og genstande arver egenskaber og metoder fra en prototype. For eksempel,
// constructor function function Person () ( this.name = 'John', this.age = 23 ) // creating objects const person1 = new Person(); const person2 = new Person(); // adding property to constructor function Person.prototype.gender = 'male'; // prototype value of Person console.log(Person.prototype); // inheriting the property from prototype console.log(person1.gender); console.log(person2.gender);
Produktion
(køn: "mand") mandlig mand
I ovenstående program har vi tilføjet en ny egenskab gender
til Person
konstruktorfunktionen ved hjælp af:
Person.prototype.gender = 'male';
Derefter modsætter person1
og person2
arver egenskaben gender
fra prototypeegenskaben for Person
konstruktorfunktionen.
Derfor både objekter person1
og person2
kan få adgang til køn ejendom.
Bemærk: Syntaksen for at tilføje egenskaben til en objektkonstruktørfunktion er:
objectConstructorName.prototype.key = 'value';
Prototype bruges til at give yderligere egenskaber til alle objekter oprettet fra en konstruktorfunktion.
Føj metoder til en konstruktørfunktion ved hjælp af prototype
Du kan også tilføje nye metoder til en konstruktorfunktion ved hjælp af prototype. For eksempel,
// constructor function function Person () ( this.name = 'John', this.age = 23 ) // creating objects const person1 = new Person(); const person2 = new Person(); // adding a method to the constructor function Person.prototype.greet = function() ( console.log('hello' + ' ' + this.name); ) person1.greet(); // hello John person2.greet(); // hello John
I ovenstående program greet
tilføjes en ny metode til Person
konstruktorfunktionen ved hjælp af en prototype.
Ændring af prototype
Hvis en prototype-værdi ændres, har alle de nye objekter den ændrede egenskabsværdi. Alle de tidligere oprettede objekter har den tidligere værdi. For eksempel,
// constructor function function Person() ( this.name = 'John' ) // add a property Person.prototype.age = 20; // creating an object const person1 = new Person(); console.log(person1.age); // 20 // changing the property value of prototype Person.prototype = ( age: 50 ) // creating new object const person3 = new Person(); console.log(person3.age); // 50 console.log(person1.age); // 20
Bemærk : Du bør ikke ændre prototyperne på standard JavaScript-indbyggede objekter som strenge, arrays osv. Det betragtes som en dårlig praksis.
JavaScript-prototype-lænkning
Hvis et objekt forsøger at få adgang til den samme egenskab, der er i konstruktorfunktionen og prototypeobjektet, tager objektet ejendommen fra konstruktorfunktionen. For eksempel,
function Person() ( this.name = 'John' ) // adding property Person.prototype.name = 'Peter'; Person.prototype.age = 23 const person1 = new Person(); console.log(person1.name); // John console.log(person1.age); // 23
I ovenstående program erklæres et egenskabsnavn i konstruktorfunktionen og også i prototypeegenskaben for konstruktorfunktionen.
Når programmet køres, skal du person1.name
se i konstruktorfunktionen for at se, om der er en egenskab, der hedder name
. Da konstruktorfunktionen har navnet egenskab med værdi 'John'
, tager objektet værdi fra denne egenskab.
Når programmet køres, skal du person1.age
se i konstruktorfunktionen for at se, om der er en egenskab, der hedder age
. Da konstruktorfunktionen ikke har age
egenskab, ser programmet på prototype-objektet til konstruktorfunktionen, og objektet arver ejendom fra prototype-objektet (hvis tilgængeligt).
Bemærk : Du kan også få adgang til prototypeegenskaben for en konstruktorfunktion fra et objekt.
function Person () ( this.name = 'John' ) // adding a prototype Person.prototype.age = 24; // creating object const person = new Person(); // accessing prototype property console.log(person.__proto__); // ( age: 24 )
I ovenstående eksempel person
bruges et objekt til at få adgang til prototypegenskaben ved hjælp af __proto__
. Det er dog __proto__
udfaset, og du bør undgå at bruge det.