2016-09-03 2 views
1

オブジェクトであるjavascript変数があり、新しい変数を最初の変数と同じにすると、オブジェクトの新しいインスタンスが作成されますか、または両方とも同じオブジェクトを参照していますか?javascriptのオブジェクト変数は参照型ですか?

+0

これらは常に同じオブジェクトを参照します。 – redneb

+0

あなたがオブジェクトの配列を持っていたなら、あなたが '{}'でそれを壊すまで、 – Redu

答えて

0

あなたは、この

var a = { foo: "foo" }; 
var b = a; 

のようなものを意味する場合はい。彼らは同じオブジェクトを参照します。

2

これらは常に同じオブジェクトを参照します。

var x = {foo:11}; 
var y = x; 
y.foo = 42; 
console.log(x.foo); 
// will print 42, not 11 
1

両方とも同じオブジェクトを参照します。 新しいインスタンスを作成したい場合:

var Person = function() { 
     this.eyes = 2, 
     this.hands = 2 
    };  

    var bob = new Person(); 
    var sam = new Person(); 

これらの二つは異なるオブジェクトです。

これは答えです。オブジェクトを作成して別のオブジェクトに割り当てると、同じオブジェクトが参照されます。ここで

は一例です:

var hacker = { 
    name : 'Mr', 
    lastname : 'Robot' 
}; 

console.log(hacker.name + '.' + hacker.lastname); 
// Output Mr.Robot 

// This variable is reference to hackers object 
var anotherPerson = hacker; 

console.log(anotherPerson.name + '.' + anotherPerson.lastname); 
// Output Mr.Robot 

// These will change hacker object name and lastname 
anotherPerson.name = 'Elliot'; 
anotherPerson.lastname = 'Alderson'; 

console.log(anotherPerson.name + ' ' + anotherPerson.lastname); 
// Output "Elliot Alderson" 

// After it if you try to log object hacker name and lastname it would be: 
console.log(hacker.name + '.' + hacker.lastname); 
// Output "Elliot Alderson" 

あなたがここにリンクをチェックして、それで遊ぶことができます。複雑ではありません。 JSBIN Object Hacker

+0

をvar bob = new person [2](); ? –

+0

私はちょうどこれを実際に試して、それがコンストラクタではないと言っています –

+0

申し訳ありませんが、それは私の間違いでした。 – George

1

オブジェクトリファレンス説明!

画像を見て分かりやすくしてください。オブジェクトを作成するとき、s1はメモリヒープ内の参照のみを持ち、今度は別のオブジェクトを作成するときにはを意味するs1 = s2と言うと、オブジェクトは実際には同じ参照を指しています。したがって、どちらか一方を変更すると、両方とも変更されます。

Object Reference Example

関連する問題