2011-08-15 20 views
5

czy istnieje sposób, aby automatycznie tworzyć podobiekty w przypisania po zakończeniu budowy, tjjs budują ścieżki obiektu w przypisania własności

var obj = {}; 
obj.a.b.c=13; 

powyższe daje mi „obj.a jest niezdefiniowana” błąd

ja napisałem funkcję, aby to zrobić, ale zastanawiał się, czy istnieje prostszy sposób

_setObjectProperty(obj,13,['a','b','c']); 
function _setObjectProperty(obj,value,loc) 
{ 
    if(loc.length>1) { 
     obj[loc[0]] = obj[loc[0]] || {}; 
     _setObjectProperty(obj[loc[0]],value,loc.splice(1)); 
    } 
    else if(loc.length===1) { 
     obj[loc[0]]=value; 
    } 
} 

Odpowiedz

8

Nie, nie ma zbudowany w sposób to zrobić w JavaScript. Jedynym sposobem jest stworzenie własnej funkcji, tak jak ty. Jeśli chcesz wygodę operatora kropki/zapisu, możesz skorzystać z następującej funkcji:

var set = function(path, value, root) { 
    var segments = path.split('.'), 
     cursor = root || window, 
     segment, 
     i; 

    for (i = 0; i < segments.length - 1; ++i) { 
    segment = segments[i]; 
    cursor = cursor[segment] = cursor[segment] || {}; 
    } 

    return cursor[segments[i]] = value; 
}; 

set("a.b.c", 2); 

console.log(a.b.c) // => 2 
+0

To jest genialne, ale jak to działa? Nie widzę, gdzie root zostanie zaktualizowany. – Tristan

+0

Wygląda na to, że głównym obiektem jest ten, do którego chcesz dołączyć tę ścieżkę. – diosney

Powiązane problemy