26 votes

Comprendre JavaScript en détail: est-ce une classe, une fonction ou simplement une variable?

Je suis un débutant en JavaScript et je trouve un concept très déroutant. Considérez le code ci-dessous:

 var person = {
     firstName   :"Penelope",
     lastName    :"Barrymore",
     // Since the "this" keyword is used inside the showFullName method below, and the showFullName method is defined on the person object,​
     // "this" will have the value of the person object because the person object will invoke showFullName ()​
     showFullName:function () {
         console.log (this.firstName + " " + this.lastName);
     }
​
 }
​
 person.showFullName (); // Penelope Barrymore
 

La personne est-elle une classe ou une fonction ou simplement une variable?

Si en supposant que cette personne est une classe, le code person.showFullName (); la bonne façon de l'invoquer, car en C # ou dans tout autre langage que nous écrivons

 person perObj = new person();
perObj.showFullName();
 

?

39voto

Barmar Points 135986

person est un objet. Il a 3 propriétés, nommé firstName, lastName, et showFullName. Les deux premières propriétés contiennent des chaînes de caractères. La dernière propriété contient une fonction.

Lorsque vous appelez une fonction avec la syntaxe <expression>.<function>(<arguments>)<expression> renvoie à un objet et <function> est le nom de l'une de ses propriétés, puis, tandis que la fonction est en cours d'exécution la variable spéciale this est définie à l'objet. C'est combien de this.firstName et this.lastName sont en mesure d'accéder à ces propriétés de l'objet.

Cette fonctionnalité n'est pas très utile quand il y a juste un seul objet, car il pourrait facilement simplement utiliser l' person variable. Mais vous pouvez utiliser la même fonction pour plusieurs objets.

function showFull() {
    console.log(this.firstName + " " + this.lastName);
}
var person1 = {
    firstName: "Penelope",
    lastName: "Barrymore",
    showFullName: showFull
};
var person2 = {
    firstName: "John",
    lastName: "Smith",
    showFullName: showFull
}
person1.showFullName(); // Penelope Barrymore
person2.showFullName(); // John Smith

12voto

loxxy Points 8479

Juste pour ajouter à Barmar, vous auriez pu faire quelque chose comme ça aussi (au cas où vous le trouveriez plus similaire à C #):

 var person = function() {
     this.firstName = "";
     this.lastName = "";
} 

person.prototype.showFullName = function () { 
     console.log (this.firstName + " " + this.lastName); 
} 

var perObj = new person();
perObj.firstName = "Penelope";
perObj.lastName = "Barrymore";
perObj.showFullName();
 

6voto

Oxi Points 431

C'est un objet, pas une classe.

Envisager de cette façon:

En d'autres classiques OO langues, lors de l'instanciation d'une classe, vous obtenez une instance; et cet exemple en est une sorte d'équivalent à un JavaScript object -

JavaScript les objets dynamiques sont des "sacs" de propriétés. C'est un ensemble de paire nom-valeur et ces valeurs peuvent être de tout type de fonctions ou de l'objet lui-même.

Dans votre cas, firstName, lastName, and showFullName sont properites de la personne objet.

Vous accéder aux propriétés d'un objet à l'aide de point(.) la notation, par exemple: person.firstName, person.showFullName()

4voto

ABFORCE Points 3280

person est en fait un littéral d'objet en JavaScript. Objet littéraux sont ceux définis comme

var obj = {
    // Properties and methods
};

Et leur type d'objet. En JavaScript, nous n'avons rien a appelé de la classe.

  • Tout est un objet. (même les fonctions)

Un objet littéral est une liste séparée par des virgules de paires nom-valeur enveloppé dans des accolades. Objet littéraux encapsuler les données, l'enfermer dans un bon paquet.

http://www.dyn-web.com/tutorials/object-literal/


Bien que nous ayons des classes dans ECMAScript 6, ils ne sont pas de vraies classes comme dans les autres langues.

MDN dit:

Classes JavaScript sont introduits dans ECMAScript 6 et sont syntaxique sucre sur du JavaScript prototype existant à base d'héritage. L' classe syntaxe est pas l'introduction d'un nouveau héritage orienté objet modèle de JavaScript. Classes JavaScript fournir un moyen beaucoup plus simple et syntaxe plus claire pour créer des objets et de les traiter avec l'héritage.

2voto

Travis J Points 28588

Est personne d'une classe ou d'une fonction ou juste une variable?

JavaScript n'a pas de classes. La variable personne est une variable pointant vers un emplacement mémoire qui contient un objet.

L'objet lui-même a plusieurs aspects. Il y a un ensemble de propriétés qui sont tous attachés à la personne de l'objet. L'une de ces propriétés contient une valeur qui est fonction de l'objet. Cette fonction de l'objet contient un contexte d'exécution.

Le Contexte d'Exécution del'ECMA a un environnement local, un environnement lexical, et cette liaison. Cette liaison points de l'objet personne. L'environnement local de la fonction est limitée à des déclarations à l'intérieur de la fonction, et de l'environnement lexical de la fonction est limitée à des déclarations à la disposition de la Personne objet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X