クラスメソッドの引数は参照渡し?
調べてみた。
適当なクラスを作って検証。
function Test(hoge) { this.hoge = hoge; }
Testクラスのコンストラクタに値を渡してみる。
数値
値渡し(オブジェクト内の値は変化しない)。
var hoge = 4423; var test = new Test(hoge);console.log(test.hoge); // => 4423
hoge = 3244;
console.log(test.hoge); // => 4423
文字列
値渡し(オブジェクト内の値は変化しない)。
var hoge = 'hogehoge'; var test = new Test(hoge);console.log(test.hoge); // => hogehoge
hoge = ‘hugahuga’;
console.log(test.hoge); // => hogehoge
論理値
値渡し(オブジェクト内の値は変化しない)。
var hoge = true; var test = new Test(hoge);console.log(test.hoge); // => true
hoge = false;
console.log(test.hoge); // => true
配列
参照渡し(オブジェクト内の値も変化する)。
var hoge = [1, 2, 3]; var test = new Test(hoge);console.log(test.hoge); // => [1, 2, 3]
hoge[0] = 3;
console.log(test.hoge); // => [3, 2, 3]
丸ごと置き換えた場合、オブジェクト内の値には影響しない。
var hoge = [1, 2, 3]; var test = new Test(hoge); console.log(test.hoge); // => [1, 2, 3] hoge = [3, 2, 1]; console.log(test.hoge); // => [1, 2, 3]
オブジェクト
参照渡し(オブジェクト内の値も変化する)。
var hoge = { x: 'xxx', y: 'yyy' }; var test = new Test(hoge);console.log(test.hoge); // => Object { x="xxx", y="yyy"}
hoge.x = ‘zzz’;
console.log(test.hoge); // => Object { x="zzz", y="yyy"}
配列と同じく丸ごと置き換えた場合は影響しない。
var hoge = { x: 'xxx', y: 'yyy' }; var test = new Test(hoge); console.log(test.hoge); // => Object { x="xxx", y="yyy"} hoge = { z: 'zzz' }; console.log(test.hoge); // => Object { x="xxx", y="yyy"}
ついでに途中で値の種類を変更した場合も調べてみた。
値渡しされるものに参照渡しされるものを入れ直した場合
オブジェクト内の値は変化しない。
var hoge = 1; var test = new Test(hoge);console.log(test.hoge);
hoge = [1, 2, 3];
console.log(test.hoge);
参照渡しされるものに値渡しされるものを入れ直した場合
オブジェクト内の値は変化しない。
var hoge = [1, 2, 3]; var test = new Test(hoge);console.log(test.hoge); // => [1, 2, 3]
hoge = 1;
console.log(test.hoge); // => [1, 2, 3]
まとめ
種類 | 渡され方 |
---|---|
数値 | 値 |
文字列 | 値 |
論理値 | 値 |
配列 | 参照 |
オブジェクト | 参照 |