2011-11-04 14 views
5

Chcę móc to zrobić:javascript: ustawienie właściwości obiektu

var user1 = { 
    name: 'John', 
    gender: 'male' 
} 


var user2 = { 
    name: 'James', 
    gender: 'male', 
    email: '[email protected]' 
} 

user1.someSetMethod({email: '[email protected]'}); 
user2.someSetMethod({name: 'Jenny', gender: 'female'}); 

pożądanego rezultatu:

var user1 = { 
    name: 'John', 
    gender: 'male', 
    email: '[email protected]' 
} 


var user2 = { 
    name: 'Jenny', 
    gender: 'female', 
    email: '[email protected]' 
} 

chcę metodę, która będzie wyznaczać atrybuty według tego, co jest przeszedł do funkcji. Czy atrybut nie istnieje Chcę go utworzyć, jeśli tak, chcę go nadpisać.

Czy taka metoda istnieje w Javascript?

+0

jQuery ma bardzo ładne rozciągają metoda: http://api.jquery.com/jQuery.extend/ –

Odpowiedz

6

To jest normalnie o nazwie rozszerzenie Twój obiekt. Praktycznie każda biblioteka JavaScript ma własną metodę, aby to zrobić. Możesz też napisać własne w kilku linijkach kodu.

Stosując metodę jQuery, można zrobić to tak:

var user1 = { 
    name: 'John', 
    gender: 'male' 
}; 

$.extend(user1, { 
    email: '[email protected]' 
}); 

user1.email === '[email protected]'; //true 
+4

Lub zwykły JS: ' var user1 = {nazwa: 'John', gender: 'male'}; user1 ["email"] = "[email protected]"; ' – mcmlxxxvi

3

Nie, nie chcesz tego robić.

Jedynym sposobem dodania metody do wszystkich obiektów jest rozszerzenie Object.prototype.

Takie działanie (w przeglądarkach ES3, takich jak IE8) powoduje dodanie właściwości do wyliczeń.

Na przykład:

Object.prototype.extend = function (o) { 
    // clone properties of o into this 
}; 

var someObj = {}; 
for (var key in someObj) { 
    console.log(key); // "extend" 
} 

Najlepsze co możesz zrobić, to użyć Object.extend

Object.extend(user2, { 
    name: "Jenny", 
    gender: "female" 
}); 

pd ma implementację extend lub można użyć:

Object.extend = function (target, source) { 
    for (var key in source) { 
    target[key] = source[key]; 
    } 
}; 
+0

@pagewil: \ Mówię ci to, co chcesz nie można zrobić rozsądku, ale możesz użyć alternatywy. – Raynos

+0

Dzięki temu jest bardziej szczegółowa :) – wilsonpage

+0

Tak naprawdę wymagam go w kontekście NodeJS, powinienem wspomnieć wcześniej naprawdę. – wilsonpage

2

Jeśli chcesz używać jquery, możesz skorzystać z jego metody rozszerzania, wraz z pewnymi ustawieniami, które sprawią, że wszystkie pożądane właściwości będą poprawnie ustawione.

coś takiego:

function whatever(obj1) { 
    var defaults = { 
     name: 'Foo Bar', 
     email: '[email protected]', 
     gender: 'male' 
    }; 

    return $.extend(defaults, obj1); 
} 
Powiązane problemy