65

以前は C++ を使用していましたが、ポインターが非常に役立つことに気付きました。ポインターのように機能するJavaScriptには何かありますか? JavaScriptにはポインタがありますか? 次のようなものを使用したい場合は、ポインターを使用するのが好きです。

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

これは非常に単純な例であり、 をそのまま使用できることはわかっていますが、aポインターが非常に役立つと思われるさらに複雑な例がいくつかあります。何か案は?

4

5 に答える 5

109

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

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

関数内では、その参照を介して渡されたオブジェクトの内容を変更できますが、参照はコピーにすぎないため、呼び出し元が持っていた参照を変更することはできません。

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
于 2013-06-29T16:42:18.870 に答える
-8

技術的には 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
于 2016-05-27T18:34:01.783 に答える