2017-12-03 18 views
0

私は、オブジェクト名を関数に渡してオブジェクトを取得するために繰り返し使用する関数を作成しようとしています。変数名の一部を関数に渡して変数名を取得する方法

以下のスニペットを使用して試しましたが、undefinedを出力しています。

名前の一部をこのような関数に渡して実際の変数を取得するにはどうすればよいですか?

function writeObject(name){ 
 
    console.log(placeObjects[name+'Item']); 
 
} 
 

 
function placeObjects(){ 
 
    var availableObjects = new Array(); 
 

 
    availableObjects.push(new Object('image','kepler')); 
 
    availableObjects.push(new Object('image','lightning')); 
 
    availableObjects.push(new Object('image','tomato')); 
 
    availableObjects.push(new Object('image','us')); 
 
    
 
    var topItem = availableObjects[0]; 
 
    var leftItem = availableObjects[1]; 
 
    var bottomItem = availableObjects[2]; 
 
    var rightItem = availableObjects[3]; 
 

 
    writeObject('top'); 
 
    writeObject('left'); 
 
} 
 

 
placeObjects();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

が、私がやろうとしていてどのように私は、動的に名前を使用して、現在のスコープ内の変数を参照するのでしょうか? –

+1

名前の部分を連結して可変アクセスを使用するという一般的な考え方は悪いです。あなたがすべてのvarの出現が名前を変更し、ロジックが間違ってくることになると、あなたは、コードの縮小を使用することを想像してください。私はいくつかのオブジェクトのキーとして名前を使用することをお勧めします。 –

+0

@SerejaNagin大丈夫ですが、変数を連結するのではなく、その全体の名前を渡すことでどのように変数を参照できますか?または、オブジェクトのキーとして名前を使用することを提案する例を挙げることはできますか?私は自分の問題が変数の親を探すことと関係していると思う。 –

答えて

2
var placeObject={}; 
function writeObject(name){ 
    console.log(placeObject[name+'Item']); 
} 

function placeObjects(){ 
    var availableObjects = new Array(); 

    availableObjects.push(new Object('image','kepler')); 
    availableObjects.push(new Object('image','lightning')); 
    availableObjects.push(new Object('image','tomato')); 
    availableObjects.push(new Object('image','us')); 
    placeObject={topItem:availableObjects[0],leftItem:availableObjects[1],bottomItem:availableObjects[2],rightItem:availableObjects[3]}; 
    // var topItem = availableObjects[0]; 
    // var leftItem = availableObjects[1]; 
    // var bottomItem = availableObjects[2]; 
    // var rightItem = availableObjects[3]; 

writeObject('top'); 
writeObject('left'); 
} 

placeObjects(); 

これは動作します。変数名をtopで変更したことを覚えておいてください。これは、writeObject呼び出しで必要なabjectを返します。

0

key:valueのペアを定義していないため、新しいObject( 'image'、 'kepler')にアクセスするのが難しくなります。以下のコードを使ってオブジェクト内の方向に割り当てられたオブジェクトリテラルを使って、オブジェクトを簡単にすることができます。おかげ@fubar

function PageObject(top, left, bottom, right) { 
 
    this.top = top; 
 
    this.left = left; 
 
    this.bottom = bottom; 
 
    this.right = right; 
 
    this.writeObject = function(direction) { 
 
     return this[direction]; 
 
    }; 
 
} 
 

 
var pageObject = new PageObject({'image':'kepler'}, {'image':'lightning'}, {'image':'tomato'}, {'image':'tomato'}); 
 
console.log(pageObject.top);

関連する問題