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.