javascript - Reaplicarea funcțiilor prototip JS după deserializare
Având următorul cod:
function Person(firstName, lastName) {
this.FirstName = firstName;
this.LastName = lastName;
}
Person.prototype.showFullName = function() {
return this.FirstName + " " + this.LastName;
};
var person = new Person("xx", "xxxx");
var jsonString = JSON.stringify(person);
var thePerson = JSON.parse(jsonString);
Scopul meu aici ar fi să pot apela „showFullName” pe thePerson. Deși înțeleg că JS nu are cu adevărat obiecte, trebuie să existe totuși o modalitate de a putea spune că ceva ar trebui tratat într-un anumit fel, ca și cum ai face cast la thePerson către un Person.
Răspuns #1
Din câte știu, cel mai bun mod de a face acest lucru este să construiești mai întâi un obiect simplu și apoi să adaugi datele pe el folosind ceva de genul metodei extend din jQuery, adică.
var thePerson = new Person(); // and make sure the constructor gracefully handles no arguments
jQuery.extend(thePerson, JSON.parse(stringData));
Așa cum s-a menționat mai jos, nu trebuie să folosești extend dacă creezi doar o copie superficială, ceea ce faci aici. Poți pur și simplu să parcurgi proprietățile datelor analizate și să le copiezi pe obiectul țintă.
Răspunsul #2
Este imposibil.
Nu poți converti un șir JSON într-un obiect cu metodele sale anterioare.
