2010-06-30 48 views
55

Có thể sử dụng tên biến trong thuộc tính chữ đối tượng để tạo đối tượng không?tạo đối tượng bằng cách sử dụng biến cho tên thuộc tính

Ví dụ

function createJSON (propertyName){ 
    return { propertyName : "Value"}; 
} 

var myObject = createJSON("myProperty"); 

console.log(myObject.popertyName); // prints "value" 
console.log(myObject.myProperty); // Does not exist 

Trả lời

113

Nếu trong ES6, bạn muốn sử dụng một biến cho một tên thuộc tính, bạn có thể sử dụng cú pháp ComputedPropertyName mới. Đặt tên biến giữa dấu ngoặc vuông:

var foo = "bar"; 
var ob = { [foo]: "something" }; // ob.bar === "something" 

Trong ES5, bạn phải tạo các đối tượng đầu tiên, và sau đó thêm các bất động sản sử dụng square bracket notation.

var foo = "bar"; 
var ob = {}; 
ob[foo] = "something"; // === ob.bar = "something" 

Nếu bạn muốn tạo lập trình JSON, bạn phải tuần tự hóa đối tượng thành chuỗi phù hợp với định dạng JSON. ví dụ. với the JSON.stringify method.

+0

Cảm ơn! Tôi đã thực sự bashing đầu của tôi về điều này. – Jpsh

6

Bạn loại có thể làm điều này:

var myObject = {}; 
    CreateProp("myProperty","MyValue"); 

    function CreateProp(propertyName, propertyValue) 
    { 
     myObject[propertyName] = propertyValue; 
     alert(myObject[propertyName]); // prints "MyValue" 
    }; 

tôi nhiều perfer này cú pháp bản thân mình mặc dù:

function jsonObject() 
{ 
}; 
var myNoteObject = new jsonObject(); 

function SaveJsonObject() 
{ 
    myNoteObject.Control = new jsonObject(); 
    myNoteObject.Control.Field1= "Fred"; 
    myNoteObject.Control.Field2= "Wilma"; 
    myNoteObject.Control.Field3= "Flintstone"; 
    myNoteObject.Control.Id= "1234"; 
    myNoteObject.Other= new jsonObject(); 
    myNoteObject.Other.One="myone"; 
}; 

Sau đó, bạn có thể sử dụng như sau:

SaveJsonObject(); 
var myNoteJSON = JSON.stringify(myNoteObject); 

Chú ý: Đây sử dụng json2.js từ đây: http://www.json.org/js.html

4

Một điều có thể phù hợp (hiện tại chức năng JSON là phổ biến cho các trình duyệt mới hơn, và json2.js là một dự phòng hợp lệ hoàn toàn), là xây dựng một chuỗi JSON và sau đó phân tích nó.

function func(prop, val) { 
    var jsonStr = '{"'+prop+'":'+val+'}'; 
    return JSON.parse(jsonStr); 
} 

var testa = func("init", 1); 
console.log(testa.init);//1 

Chỉ cần ghi nhớ, JSON tên thuộc tính cần phải được kèm theo trong dấu ngoặc kép.

35

ES6 giới thiệu tên thuộc tính, cho phép bạn để làm

function CreateJSON (propertyName){ 
    var myObject = { [propertyName] : "Value"}; 
} 

hỗ trợ Lưu ý trình duyệt hiện nay không đáng kể.

+0

thú vị, bất kỳ cập nhật nào về hỗ trợ trình duyệt? – Ayyash

+0

Khi tôi viết câu trả lời, chỉ Firefox Nigthly. Bây giờ Firefox 34+ và Safari 7.1.3+, theo [MDN] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#Browser_compatibility). – Oriol

+0

Đây là câu trả lời hay nhất cho tôi. Tôi đang sử dụng nodejs. – James

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