1

私は奇妙なことにつまずいた。

関数を介して属性の値を取得できるモデル クラスがありますmodel.get(attributeName)

だから私はこれをビューで行いました:

var mapModel = new Ex.Models.MapModel(model);
var view = new Ex.Views.MapView(mapModel);

var d = this.model.get('layerIds');
d.mapLayer = view.getId();

console.log("layerIds", this.model.get('layerIds'));

属性layerIds.mapLayernullデフォルトで に設定されています。これをビュー ID (例: 43)に設定した場合、変数を作成して値をコピーし、モデルの値とは無関係にその値を操作するため、console.logが返されることを期待します。{mapLayer: null}dthis.model.get('layerIds')

しかし、このコードを実行すると、ログには次のように表示されます。

{mapLayer: 43}

どうしてこれなの?Javascript 変数は、コピーされた値を追跡し、他の変数のいずれかが変更された場合に自身の値を更新するのはなぜですか?

そして、どうすればこれを止めることができますか?

4

2 に答える 2

1

参照によるJavascriptと値によるJavascriptから:

「Javascript は常に値渡しですが、変数がオブジェクト (配列を含む) を参照する場合、"値" はオブジェクトへの参照です。」

this.model.get('layerIds'); //  returns an object : {mapLayer: null}
于 2013-08-06T09:23:52.713 に答える