2017-02-02 1 views
0

J'essaie de créer mon objet via une fonction, mais je n'arrive pas à comprendre la syntaxe de la fonction getter.Fonction getter Javascript de la fonction

var myObject = 
{ 
    0:123, 

    get a() 
    { 
     return this[0]; 
    } 
} 


console.log("This works: " + myObject.a); 


function test() 
{ 
    this[0] = 123; 

// error 
    this.a = get function() 
    { 
    return this[0]; 
    }; 
} 


var myTest = new test(); 

console.log(myTest.a); 

Au sein de la fonction de test, l'attribution de la fonction get génère une erreur de virgule manquant et si je supprime la « fonction » mot-clé, il est dit que get n'est pas défini.

Comment puis-je affecter une fonction getter à l'objet courant dans ma fonction?

+0

Je ne pense pas que 'var f = get function() {...} 'la syntaxe est correcte, utilisez plutôt' var f = get {...} '. Votre fonction 'test' ne parvient pas à analyser, tandis que la suppression de' function() 'le fait fonctionner – Aaron

+1

Vous obtenez cette erreur car ce n'est pas la bonne syntaxe à utiliser pour [définir un getter] (https://developer.mozilla.org/fr-FR/docs/Web/JavaScript/Guide/Working_with_Objects # Defining_getters_and_setters) –

Répondre

2

Vous pouvez essayer quelque chose comme ceci:

var myObject = 
{ 
    0:123, 

    get a() 
    { 
     return this[0]; 
    } 
} 


console.log("This works: " + myObject.a); 


function test() 
{ 
    this[0] = 123; 

    Object.defineProperties(this, {"a": { get: function() { 
     return this[0]; 
    }}}); 
} 


var myTest = new test(); 

console.log(myTest.a); 
+0

Existe-t-il une version abrégée semblable à ce que j'essayais de faire ou est-ce la seule façon? – John

+0

Je ne pense pas. Vous ne pouvez utiliser le chemin court qu'avec un littéral d'objet. \t C'est le plus proche possible, et dans ce cas, vous ne repasserez pas 'this'. test function() { \t \t \t retour {\t \t \t \t "0": 123, \t \t obtenir un() { \t \t \t retour cette [ "0"]; \t \t} \t \t \t \t \t}} \t –

0

Peut-être que cela fonctionne pour vous:

 function test() 
     { 
      this[0] = 123; 

      Object.defineProperty(this, "a", { get: function() { return this[0]; } }); 
     }