2011-08-15 35 views
5

là có một cách để tự động tạo subobjects trong một bài tập sau khi xây dựng, tức làjs xây dựng con đường đối tượng trong phân hữu

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

trên mang lại cho tôi một "obj.a là không xác định" lỗi

i đã viết một chức năng để thực hiện việc này, nhưng tự hỏi liệu có cách nào dễ dàng hơn không

_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; 
    } 
} 

Trả lời

8

Không, không có cách nào để thực hiện điều này trong JavaScript. Cách duy nhất là tạo ra chức năng của riêng bạn như bạn đã làm. Nếu bạn muốn sự tiện lợi của toán tử dấu chấm/ký hiệu, bạn có thể sử dụng chức năng sau:

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

Điều này thật tuyệt vời nhưng nó hoạt động chính xác như thế nào? Tôi không thấy nơi gốc được cập nhật. – Tristan

+0

Có vẻ như thư mục gốc là đối tượng bạn có thể muốn đính kèm đường dẫn đó. – diosney

Các vấn đề liên quan