2016-06-08 12 views
-1

Ich möchte auf meine Routine-Parameter wie in einem Bash-Skript zugreifen, indem Sie das Dollar-Präfix und die Parameternummer verwenden ($ 1 = erster Parameter, $ 2 = zweiter Parameter), meine Funktionssignatur muss leer sein.Zugriffsparameter wie ein Bash-Skript

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

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

Wie kann ich das tun? Ich habe versucht, die Methode anwenden ohne Erfolg.

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

Sie sollten dies nicht tun. –

+0

Sie können einen 'mit' Block versuchen, aber das würde ich vermeiden. –

Antwort

2

Bitte verwenden Sie diese nicht im Produktionscode:

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!");

Arbeitet nicht mit "use strict" obwohl.

0

Alle JavaScript-Funktionen haben einen versteckten arguments Parameter.

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

Ich möchte auf die Argumente wie in einem Bash-Skript zugreifen. Das arguments-Objekt nicht verwenden. – user123123123

+1

@ user123123123 Sie können nicht. –

+0

Sie sind nicht klar. Was sollte $ 1 sein? Der erste Parameter wurde an die Funktion übergeben? Oder möchten Sie, dass es ein Parameter von der Befehlszeile ist, wenn Sie das Skript ausführen. Angenommen, Sie verwenden node.js, um es auszuführen. –

0

Nun, Parameter in bash-ähnlichen Variablen Umwandlung nicht so einfach und erfordert Verwendung von Objekten (more) - entweder global window Objekt mit - dann Parameter außerhalb der Funktion sichtbar ist, oder lokale Verwendung Objekt, um Parameter zu speichern - dann ist es nicht 100% bash-like.

-Code - mit 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 - unter Verwendung von Objekt:

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

Das ist so ... Aber es kann die einzige Lösung sein .. –

+0

Ja das ist ziemlich schlau mit dem Fensterobjekt. –