2016-06-08 1 views
-1

Je veux accéder à mes paramètres de routine comme dans un script bash, en utilisant le préfixe dollar et le numéro de paramètre ($ 1 = premier paramètre, $ 2 = deuxième paramètre), ma signature de fonction doit être vide.Paramètres d'accès comme un script bash

function foo (/* Empty */) { 
    return $1 + $2 + $3; 
} 

foo(2, 2, 4); // => 8 

Comment puis-je faire cela? J'ai essayé d'utiliser la méthode apply sans succès.

foo.apply(null, { $1: 2, $2: 2, $3: 4 }); 
+0

Vous ne devriez pas faire cela. –

+0

Vous pouvez essayer un bloc 'with', mais je l'éviterais. –

Répondre

2

S'il vous plaît ne pas utiliser dans le code de production:

Object.defineProperties(window, { 
 
    '$1': { get: function fn() { return fn.caller.arguments[0]; } }, 
 
    '$2': { get: function fn() { return fn.caller.arguments[1]; } }, 
 
    '$3': { get: function fn() { return fn.caller.arguments[2]; } }, 
 
    '$4': { get: function fn() { return fn.caller.arguments[3]; } }, 
 
    '$5': { get: function fn() { return fn.caller.arguments[4]; } } 
 
}); 
 

 
var a = function() { 
 
    console.log($1, $2, $3, $4, $5); 
 
}; 
 

 
a("Hello", "I can't beleave", "this", "actually", "works!");

Ne pas travailler avec "use strict" cependant.

0

Toutes les fonctions javascript ont un paramètre arguments caché.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments

function foo() { 
    for(var i = 0; i < arguments.length; i++) { 
    this['$'+(i+1)] = arguments[i] 
    } 
    console.log($1, $2); 
} 
foo(1, 'b'); 
+0

Je veux accéder aux arguments comme dans un script bash. Ne pas utiliser l'objet arguments. – user123123123

+1

@ user123123123 Vous ne pouvez pas. –

+0

Vous n'êtes pas clair. Que devrait être 1 $? Le premier paramètre passé à la fonction? Ou voulez-vous que ce soit un paramètre de la ligne de commande lors de l'exécution du script. En supposant que vous utilisez node.js pour l'exécuter. –

0

Eh bien, la conversion de paramètres en variables bash comme n'est pas simple et nécessite l'aide d'objets (more) - soit en utilisant l'objet global window - alors les paramètres sont visibles en dehors de la fonction, ou à l'aide locale objet pour stocker les paramètres - alors ce n'est pas 100% bash-like.

Code - en utilisant window:

function a() { 
    for (var i = 0; i < arguments.length; i++) { 
    window['$' + (i + 1)] = arguments[i]; 
    } 
    console.log($1); // 12 
} 

a(12, 34, "a"); 
console.log($1); // 12 - visible outside function 
console.log($2); // 34 
console.log($3); // "a" 

Code - objet en utilisant:

function a() { 
    var vars = {}; 
    for (var i = 0; i < arguments.length; i++) { 
    vars['$' + (i + 1)] = arguments[i]; 
    } 
    console.log(vars.$1); // 12 
    return vars; 
} 

var b = a(12, 34, "a"); 
console.log(b.$1); // 12 
console.log(b.$2); // 34 
console.log(b.$3); // "a" 
+0

C'est le cas ... Mais c'est peut-être la seule solution –

+0

Oui, c'est assez intelligent avec l'objet window. –