2012-03-05 9 views
-1

「myFields」のすべてのプロパティを1つのステートメントに割り当てる方法があるかどうかを知りたいですか?関数が返すオブジェクトにプロパティを追加しますか?

これは動作します:

function fieldMap(namesString) { 
    var result = {}; 
    var names = namesString.split(' '); 
    for (index in names) { 
     var name = names[index]; 
     result[name] = name + '/text()'; 
    } 
    return result; 
} 
var myFields = fieldMap('title rating author url'); 
myFields['cover']="@cover"; 

は、これは動作しません:

var myFields = fieldMap('title rating author url')['cover']='@cover'; 
+0

あなたは、オブジェクトのすべてのプロパティに同じ値を割り当てることを言っています単一の声明? –

答えて

0

あなたは、単一の文でオブジェクトのすべてのプロパティを変更したい場合は、あなたが自分でマッピング方法を記述する必要があります:

function fieldMap(namesString) { // Mike Lin's version 
    var result = {}; 
    var names = namesString.split(' '); 
    for (var i=0; i<names.length; i++) { 
     var name = names[i]; 
     result[name] = name + '/text()'; 
    } 
    return result; 
} 

Object.prototype.map = function(callbackOrValue){ 
    /* better create an object yourself and set its prototype instead! */ 
    var res = {}; 
    for(var x in this){ 
     if(typeof this[x] === "function") 
      res[x] = this[x]; 
     if(typeof callbackOrValue === "function") 
      res[x] = callbackOrValue.call(this[x]); 
     else 
      res[x] = callbackOrValue; 
    } 
    return res; 
} 

その後、あなたは

を使用することができます10
var myFields = fieldMap('title rating author url').map(function(){return '@cover'}; 
    /* ... or ... */ 
var myFields = fieldMap('title rating author url').('@cover'); 

しかし、あなたはmyFieldsを設定し、同じステップで値を変更したい場合は、この方法を試してください。

var myFields; 
(myFields = fieldMap('title rating author url'))['cover']='@cover'; 
関連する問題