J'utilise javascript depuis un moment, mais je n'ai jamais appris la langue après les bases. Je suis en train de lire "Pro Javascript Techniques" de John Resig - je suis en train de poser quelques questions, mais je ne trouve pas les réponses dans le livre ou sur google, etc.Questions orientées objet en Javascript
John donne cet exemple dans son livre :
Fonction # 1
function User(name, age){
this.name = name;
this.age = age;
}
// Add a new function to the object prototype
User.prototype.getName = function(){
return this.name;
};
User.prototype.getAge = function(){
return this.age;
};
var user = new User("Bob", 44);
console.log("User: " + user.getName() + ", Age: " + user.getAge());
Je suis encore à apprendre sur la propriété prototype, donc j'essayé d'écrire quelque chose de similaire:
Fonction # 2
function User (name, age) {
this.name = name;
this.age = age;
this.getName = function() {
return this.name;
};
this.getAge = function() {
return this.age;
};
}
var user = new User("Bob", 44);
console.log("User: " + user.getName() + ", Age: " + user.getAge());
Il n'utilise pas le propriété prototype pour créer les fonctions getName et getAge, mais la sortie est le même que l'exemple de John.
je l'ai pris un peu plus loin, et a créé ceci:
Fonction # 3
var User = {
name: "",
age: 0,
setName: function(name) {
this.name = name;
},
setAge: function(age) {
this.age = age;
},
getName: function() {
return this.name;
},
getAge: function() {
return this.age;
}
};
User.setName("Bob");
User.setAge(44);
console.log("User: " + User.getName() + ", Age: " + User.getAge());
Encore une fois - il semble différent de l'exemple de John (et je devais ajouter des méthodes setter), mais la sortie est le même.
Question # 1 - Quelle est la différence entre les 3 fonctions? Quel est l'avantage de la propriété du prototype, et la fonction # 2 fait quelque chose de mal, parce qu'elle semble plus directe au code # 2 au lieu de # 1 (bien que je suis sûr que # 1 le fait mieux que John l'a créé) .
Question # 2 - Comment est-ce que je pourrais modifier la fonction # 3 pour ne pas utiliser les méthodes setName et setAge, tout en gardant le {...} raccourci? Est-ce que le raccourci {...} peut avoir des constructeurs?
Merci d'avance de m'avoir aidé à apprendre!
EDIT Je pense que ma deuxième question était un peu confuse. Je voulais dire comment pourrais-je utiliser le raccourci {...} pour créer un objet utilisateur, mais après avoir créé l'objet, dire quelque chose comme:
var user = new User("Bob", 44);
Tout comme dans la fonction # 1 - ou est-ce pas possible ?
EDIT # 2 Wow! Merci à tous pour les réponses impressionnantes. Cela me rend vraiment beaucoup plus clair. Donc, si je comprends bien, la différence entre # 1 et # 2 ne sont pas trop. Si je ne crée qu'un seul objet "Utilisateur", ils ne sont probablement pas différents du tout. Mais si mon programme crée de nombreux objets Utilisateur, le # 1 sera probablement plus efficace et utilisera moins de mémoire puisque tous les objets partageront les mêmes fonctions.
J'apprécie vraiment toutes les bonnes réponses - Merci!
Je suppose que je veux dire la question 2 est comment puis-je modifier la fonction # 3 pour que je puisse dire quelque chose comme personne var = new User(); – BrianH
Ce commentaire n'est pas tout à fait vrai "Toutes les différentes fonctions de getName se comportent toutes exactement de la même manière". Le type # 2 a accès à des vars privés – meouw
Mon point était qu'ils se comportent de la même manière dans l'exemple. – Glomek