これはあなたが尋ねようとしていると私が思うものです:
引数が 1 つしか渡されない場合、関数の 4 番目の引数を操作するにはどうすればよいですか?
その質問に対する答えは次のとおりです。
関数の 4 番目の引数を操作する場合は、少なくとも 4 つの引数を関数に渡す必要があります。
問題に別の方法でアプローチできる方法がいくつかあります。
#1
常に必要な引数が 1 つある場合は、それが最初の引数であることを確認してください。
function Too(mandatoryArg, optionalArg1, optionalArg2) {
alert(++mandatoryArg);
if (optionalArg1) {
alert(++optionalArg1);
}
}
#2
すべての未定義または未知の引数のプレースホルダー値を渡します。
null
、、undefined
またはを使用できます''
。
alert(Too(null, null, 4));
function Too(optArg1, optArg2, mandatoryArg) {
alert(++mandatoryArg);
}
#3
引数の数に基づいて決定を下します。
function Too(optArg1, optArg2, optArg3) {
var numArgs = arguments.length;
if (numArgs === 1) {
alert(++optArg1);
}
if (numArgs === 3) {
alert(++optArg3);
}
}
編集
「これは最初の関数の変数を更新しますか?」
何かを示す実際の例を使用してみましょう。
function one() {
var a = 0;
var b = 25;
var c = 50;
var d = -1;
d = two(a, b, c);
alert("a: " + a);
alert("b: " + b);
alert("c: " + c);
alert("d: " + d);
}
function two(a, b, c) {
++a;
++b;
++c;
if (arguments.length === 1) {
return a;
}
if (arguments.length === 3) {
return c;
}
}
呼び出すone()
と、次のアラートが発生します。
a: 0
b: 25
c: 50
d: 51
d
関数one()では、 の値のみが変更されます。
これは、 two()d
の戻り値が割り当てられているためです。
two()内のa
、b
、およびへの変更は、 one()内の、、およびの値には影響しません。 c
a
b
c
これは、two()の引数の名前がa
、b
、および であっても当てはまりc
ます。
上記のコードをいじってみましょう。
編集#2
ゲーム オブジェクトを動かす関数を作成する方法の 1 つを次に示します。
var FORWARD = 0;
var BACK = 1;
var LEFT = 2;
var RIGHT = 3;
// use an object with three values to represent a position
var pos = {
x: 0,
y: 0,
z: 0
};
pos = moveObject(pos, FORWARD);
printPosition(pos);
pos = moveObject(pos, LEFT);
printPosition(pos);
pos = moveObject(pos, FORWARD);
printPosition(pos);
pos = moveObject(pos, LEFT);
printPosition(pos);
// invoking moveObject() with one argument
// will move the object forward
pos = moveObject(pos);
printPosition(pos);
function moveObject(position, direction) {
// assume FORWARD if no direction is specified
if (typeof direction === 'undefined') {
direction = FORWARD;
}
if (direction === FORWARD) {
++position.z;
}
if (direction === BACK) {
--position.z;
}
if (direction === LEFT) {
--position.x;
}
if (direction === RIGHT) {
++position.x;
}
return position;
}
function printPosition(pos) {
alert(pos.x + ", " + pos.y + ", " + pos.z);
}
これは、別のアプローチの実際のデモを示すフィドルです。