2013-06-29 7 views
23

私は以前C++を使っていましたが、そのポインタが非常に役立つことに気付きました。 javascriptにポインタのように動作するものはありますか? JavaScriptはポインタを持っていますか?私はのようなものを使用したい場合、ポインタを使用したい:javascriptにポインタがありますか?

var a = 1; 
var b = "a"; 
document.getElementById(/* value pointed by b */).innerHTML="Pointers"; 

私は、これは非常に単純な例であると私はちょうどaを使用することができることを知っているが、私はポインタが非常に便利見つけるだろういくつかのより複雑な例があります。何か案は?

+3

Mmh ...一般的にポインタは必要ありません。ポインタが役に立つ場所で遭遇した事例の、より現実的な例を挙げることができますか? – Ryan

+0

JavaScriptの[Pointers in duplicate]の可能な複製?(http://stackoverflow.com/questions/10231868/pointers-in-javascript) –

答えて

42

いいえ、JSにはポインタがありません。

オブジェクトは、のコピーを渡すことによって回避されます。プログラマは、オブジェクトのアドレスを表すCのような "値"にアクセスすることはできません。関数内で

1は、その参照を経由して渡されたオブジェクトの内容を変更することがありますが、あなたの参照が唯一のコピーであるので、あなたは、呼び出し側が持っていたことの参照を変更することはできません。

var foo = {'bar': 1}; 

function tryToMungeReference(obj) { 
    obj = {'bar': 2}; // won't change caller's object 
} 

function mungeContents(obj) { 
    obj.bar = 2;  // changes _contents_ of caller's object 
} 

tryToMungeReference(foo); 
foo.bar === 1; // true - foo still references original object 

mungeContents(foo); 
foo.bar === 2; // true - object referenced by foo has been modified 
+1

参照の_copyとは何ですか?ポインタのように使用することができますし、どうすれば使用できますか? ? –

+0

@ user2297366回答の更新を参照 – Alnitak

+1

参照はオブジェクトの名前です、コピーは基本的に同じアドレスを指す新しい名前です – Mataniko

15

あなたが賭けJavaScriptにはポインタがあります。オブジェクトはポインタです。

//this will make object1 point to the memory location that object2 is pointing at 
object1 = object2; 

//this will make object2 point to the memory location that object1 is pointing at 
function myfunc(object2){} 
myfunc(object1); 

メモリロケーションがもはやポイントされていない場合、データは失われます。

Cで、あなたはポインタの実際のアドレスやポインタの実際の値を見ることができないとは違って、することができます唯一のデリファレンスそれ(それが指すアドレスの値を取得します。)

0

技術的にJSポインタを持っているが、私は彼らの行動を模倣する方法を発見しません。)

var car = { 
    make: 'Tesla', 
    nav: { 
     lat: undefined, 
     lng: undefined 
    } 
}; 

var coords: { 
    center: { 
     get lat() { return car.nav.lat; }, // pointer LOL 
     get lng() { return car.nav.lng; } // pointer LOL 
    } 
}; 

car.nav.lat = 555; 
car.nav.lng = 777; 

console.log('*** coords: ', coords.center.lat); // 555 
console.log('*** coords: ', coords.center.lng); // 777 
+3

'car'のプロパティを返すだけです。それはポインタや模倣とは無関係で、スコープとして知られています。 –

1

はこれを試してみてください:

//MaybePointer Lib 
 
function MaybePointer(v){ 
 
    this.val = v; 
 
} 
 
MaybePointer.prototype.valueOf = function(){ return this.val }; 
 

 
//Your code 
 
var a = new MaybePointer(1); 
 
var b = a; 
 
document.getElementById(b+'').innerHTML="Pointers 1"; 
 

 
var c = new MaybePointer(2); 
 
var b = c; 
 
document.getElementById(b+'').innerHTML="Pointers 2";
<div id="1"></div> 
 
<div id="2"></div>

関連する問題