2013-05-07 19 views
6

Tôi muốn thêm nhiều thuộc tính vào một đối tượng hiện có với các thuộc tính hiện có. Có cách nào ngắn gọn hơn một dòng cho mỗi thuộc tính mới không?Thêm nhiều thuộc tính vào một đối tượng js hiện có

myObject.name = 'don'; 
myObject.gender = 'male'; 

Mọi thứ trên MDN cho thấy làm thế nào để làm đối tượng mới với ký hiệu khung, nhưng đối tượng không tồn tại: thư viện https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objects

+1

Bạn coul d tạo một hàm nhận đối tượng của bạn và một đối tượng với các đạo cụ/giá trị mới và liệt kê đối tượng mới, cập nhật đối tượng cũ. Điều đó sẽ ngắn gọn hơn một chút. 'update (obj, {name:" don ", giới tính:" male "})' –

Trả lời

5

Từ How can I merge properties of two JavaScript objects dynamically?

var obj2 = {name: 'don', gender: 'male'}; 
for (var attrname in myobject) { myobject[attrname] = obj2[attrname]; } 

EDIT

Để có một chút rõ ràng hơn về cách bạn có thể mở rộng đối tượng sử dụng chức năng này:

//Extend the protype so you can make calls on the instance 
Object.prototype.merge = function(obj2) { 
    for (var attrname in obj2) { 
     this[attrname] = obj2[attrname]; 
    } 
    //Returning this is optional and certainly up to your implementation. 
    //It allows for nice method chaining. 
    return this; 
}; 
//Append to the object constructor function so you can only make static calls 
Object.merge2 = function(obj1, obj2) { 
    for (var attrname in obj2) { 
     obj1[attrname] = obj2[attrname]; 
    } 
    //Returning obj1 is optional and certainly up to your implementation 
    return obj1; 
}; 

Cách sử dụng:

var myObject1 = { One: "One" }; 
myObject1.merge({ Two: "Two" }).merge({ Three: "Three" }); 
//myObject1 is { One: "One", Two: "Two", Three: "Three", merge: function } 


var myObject2 = Object.merge2({ One: "One" }, { Two: "Two" }); 
Object.merge2(myObject2, { Three: "Three" }); 
//myObject2 is { One: "One", Two: "Two", Three: "Three" } 

Lưu ý: Bạn chắc chắn có thể thực hiện một chiến lược xung đột merge linh hoạt tùy theo nhu cầu của bạn .

3

Sử dụng jQuery

jQuery.extend(myObject, { name : 'don', gender : 'male' }); 
+0

Không thể sử dụng jQuery. (Giống như không may lớn) Mặc dù điều này có vẻ siêu sạch sẽ ... –

+0

Câu hỏi này không được gắn thẻ [tag: jQuery]. –

+0

jQuery chỉ để mở rộng một đối tượng là ngớ ngẩn. –

4

Đôi khi tôi làm điều đó như thế này:

var props = { 
    name : 'don', 
    gender : 'male', 
    age : 12, 
    other : false 
}; 
for(var p in props) myObject[p] = props[p]; 
2

Trong ECMAScript 5 bạn có thể làm cho chúng ta về defineProperties:

Object.defineProperties(myobject, { 
    name: { 
    value: 'don' 
    }, 
    gender: { 
    value: 'male' 
    } 
}); 
+0

Thật không may rằng cú pháp là khá tiết, làm cho nó thậm chí còn dài hơn bản gốc mà OP là hy vọng sắp xếp hợp lý. –

+0

Vâng, tôi đoán bạn đúng, điều này có nhiều sử dụng hơn khi bạn muốn bảo vệ chống lại đột biến của các đối tượng của bạn. Hehe, tôi luôn làm điều đó ... = P – JimmyRare

+0

Tôi đồng ý. Đó là một tính năng tốt đẹp, chỉ là clunky. –

-1

Phương pháp .push() làm việc cho tôi về một vấn đề trong một lớp học luật miễn phí Trại . Tôi không biết nếu điều này là thực tế trong ứng dụng thực tế nhưng nó đã vượt qua bài kiểm tra. Đây là những gì đã ở vị trí:

var myMusic = [ 
    { 
    "artist": "Billy Joel", 
    "title": "Piano Man", 
    "release_year": 1973, 
    "formats": [ 
     "CS", 
     "8T", 
     "LP" ], 
    "gold": true 
    }]; 

Đây là những gì tôi đã nhập:

myMusic.push({ 
    "artist": "Metallica", 
    "title": "Ride the Lightning", 
    "release_year" : 1984, 
    "formats": [ 
     "CS", 
     "8T", 
     "LP" ] 
    } // Add record here 
); 

Đây là kết quả mà nó hiển thị:

[ { 
    "artist": "Billy Joel", 
    "title": "Piano Man", 
    "release_year": 1973, 
    "formats": [ 
     "CS", 
     "8T", 
     "LP" ], 
    "gold": true 
    },{ 
    "artist": "Metallica", 
    "title": "Ride the Lightning", 
    "release_year" : 1984, 
    "formats": [ 
     "CS", 
     "8T", 
     "LP" ] 
    }] 
+0

Nó có nghĩa là một câu trả lời.Bài đăng gốc hỏi có cách nào để thêm nhiều thứ vào một đối tượng hiện có cùng một lúc hay không. –

+3

chờ đợi nhưng đó là thêm một đối tượng bổ sung vào một mảng. không giống nhau. – Julix

3

Trong ES6/ES2015 bạn có thể sử dụng phương pháp Object.assign

let obj = {key1: true}; 
console.log('old obj: ', obj); 
let newObj = {key2: false, key3: false}; 

Object.assign(obj, newObj); 
console.log('modified obj: ', obj); 
Các vấn đề liên quan