2013-06-28 2 views
2

J'ai un objet qui a une méthode qui utilise un attribut. Est-ce que j'utilise l'attribut correctement?Transférer l'attribut d'un objet js dans sa méthode

function TestObject(words) { 
    this.words = words; 

    function alertStuff() { 
    console.log(this.words); 
    } 
} 

doItPlease = new TestObject('say something!'); 
doItPlease.alertStuff(); 

Répondre

4

Les propriétés et les variables sont distinctes dans JavaScript.

this.alertStuff = function() { 
    console.log(this.words); 
} 

Le this dans votre exemple tient référence au nouvel objet. Tous les paramètres/variables de la fonction constructeur n'ont pas de relation directe avec cet objet.


Plus idiomatique consiste à ajouter la fonction à l'objet prototype commun au lieu de chaque instance.

TestObject.prototype.alertStuff = function() { 
    console.log(this.words); 
} 

Comment cela fonctionne est que lorsque vous faites doItPlease.alertStuff(), la valeur de this dans alertStuff est automatiquement réglé sur l'objet doItPlease. Par conséquent, la méthode alertStuff() a accès à cet objet et à toutes ses propriétés. Étant donné que toutes les instances que vous créez à partir du constructeur TestObject ont le même objet TestObject.prototype dans leur chaîne prototype, il y a moins de surcharge mémoire car elles partagent toutes la même fonction.

+0

Merci beaucoup c'est beaucoup plus clair! Est-il possible de définir une méthode à l'intérieur des accolades de la définition de l'objet? Je ne veux pas avoir un bloc de code définissant mon objet, et un autre prolongeant son prototype :) –

+0

@DonnyP: Je ne suis pas sûr de ce que vous voulez dire par les accolades de la définition de l'objet. Les seules accolades ici définissent des corps de fonction. Et aussi je ne suis pas sûr de ce que vous voulez dire par un bloc de code définissant l'objet, et un autre qui prolonge le prototype. Pourriez-vous expliquer ce que vous essayez d'éviter? –

+0

@DonnyP Oui, c'est possible. C'est ce qu'on appelle une fermeture. Les fonctions à l'intérieur de la fermeture ne sont disponibles que dans la portée. – Tamillharasan

Questions connexes