Sau Markus của answer, trong các phiên bản mới hơn của JS (ES6 tôi nghĩ), bạn có thể tạo một nhà máy 'struct' đơn giản hơn sử dụng Arrow Functions và Rest Parameter như vậy:
const Struct = (...keys) => ((...v) => keys.reduce((o, k, i) => {o[k] = v[i]; return o} , {}))
const Item = Struct('id', 'speaker', 'country')
var myItems = [
Item(1, 'john', 'au'),
Item(2, 'mary', 'us')
];
console.log(myItems);
console.log(myItems[0].id);
console.log(myItems[0].speaker);
console.log(myItems[0].country);
Kết quả của hoạt động này là:
[ { id: 1, speaker: 'john', country: 'au' },
{ id: 2, speaker: 'mary', country: 'us' } ]
1
john
au
Bạn có thể làm cho nó trông giống như namedtuple Python:
const NamedStruct = (name, ...keys) => ((...v) => keys.reduce((o, k, i) => {o[k] = v[i]; return o} , {_name: name}))
const Item = NamedStruct('Item', 'id', 'speaker', 'country')
var myItems = [
Item(1, 'john', 'au'),
Item(2, 'mary', 'us')
];
console.log(myItems);
console.log(myItems[0].id);
console.log(myItems[0].speaker);
console.log(myItems[0].country);
Và kết quả:
[ { _name: 'Item', id: 1, speaker: 'john', country: 'au' },
{ _name: 'Item', id: 2, speaker: 'mary', country: 'us' } ]
1
john
au
... và sau đó tôi hiểu các chức năng của nhà máy. 1 cho câu trả lời rõ ràng, dễ hiểu và ngắn gọn, cùng với ví dụ về nhà máy. – John
Tôi thích cách tiếp cận này, tuy nhiên hãy cẩn thận nếu bạn sử dụng trình biên dịch đóng. Bộ tuple chỉ có thể được truy cập dưới dạng chuỗi trong trường hợp này, bởi vì các thuộc tính được đổi tên. (Ít nhất là ở chế độ nâng cao) – kap