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