Gibt es eine Möglichkeit, Funktionen in Datenstrukturen einzufügen, die aus JSON-Daten mithilfe eines JavaScript-Prototyps oder auf andere Weise erstellt wurden? Ich habe einen Rest-Service, der die Liste der Kontakte zurückgibt. Der Kontakt hat Vorname, Nachname. Ich möchte jeder Kontaktstruktur in einer Liste die Funktion getFullName () hinzufügen.
Ich möchte so etwas wie das Folgende tun.
var contacts = [{firstName: 'Stephen', lastName: 'Hawking'},
{firstName: 'Nicolas', lastName: 'Tesla'},
{firstName: 'Dean', lastName: 'Kamen'}
];
for(var i = 0; i < contacts.length; i++){
var contact = contacts[i];
//inject defined functions if it is not yet injected.
//contact.inject(definedFunctions); //How do we do this
console.log(contact.getFullName());
}
0
dipu
19 Aug. 2015 im 02:00
3 Antworten
Beste Antwort
Sie sollten einen Wrapper um diese Daten erstellen:
function Contact(data) {
this.data = data;
}
Contact.prototype.getFullName = function () {
return this.data.firstName + ' ' + this.data.lastName;
}
var contacts = [...]
.map(function (data) {
return new Contact(data);
});
2
Jacob
18 Aug. 2015 im 23:02
Verwenden Sie "bind ()":
var contacts = [{firstName: 'Stephen', lastName: 'Hawking'},
{firstName: 'Nicolas', lastName: 'Tesla'},
{firstName: 'Dean', lastName: 'Kamen'}
];
var getFullName = function() {
return this.firstName + ' ' + this.lastName;
};
for(var i = 0; i < contacts.length; i++){
var contact = contacts[i];
contact.getFullName = getFullName.bind(contact);
// Or:
//contact['getFullName'] = getFullName.bind(contact);
console.log(contact.getFullName());
}
0
Skarllot
18 Aug. 2015 im 23:11
Es ist nicht möglich, Funktionen in JSON-Daten einzufügen, da es sich nur um Text handelt. Nachdem Sie den JSON in JavaScript-Objekte analysiert haben, können Sie den Objekten, die Funktionen sind, problemlos Eigenschaften hinzufügen:
for(var i = 0; i < contacts.length; i++){
var contact = contacts[i];
contact.getFullName = function(){
return this.firstName + ' ' + this.lastName;
};
console.log(contact.getFullName());
}
1
Guffa
18 Aug. 2015 im 23:07