Riguardante il prototipo di JavaScript e la funzione di costruzione iniziale

0

Sto seguendo un tutorial su OOP in JavaScript (javascriptissexy.com utilizzando OOP in JS: Cosa devi sapere).

L'istruttore sta spiegando il modello Costruttore / Prototipo della creazione dell'oggetto. Capisco cosa sta succedendo, ma ho una domanda scottante a cui lui non risponde!

Iniziamo così:

function User(name, email) {
    this.name = name,
    this.email = email,
    this.scores = [],
    this.etc = etc
}

Ho capito e ora ogni var xxx = nuovo utente ("nome", "email") avrà un xxx.name, xxx.email, xxx.scores, ecc.

Ma ora, sovrascriviamo il prototipo:

User.prototype = {
    constructor: User;
    saveScore: function(...){...},
    changeEmail: function(...){...},
    showNameAndScore: function(...){...}
}

Ora ogni var xxx = nuovo utente (...) erediterà i metodi saveScore, changeEmail e showNameAndScore.

Sono nuovo di zecca, ma da quello che ho capito, avrei potuto includere queste funzioni all'inizio:

function User(...) {
    this.name = name,
    this.saveScore = function(...) {...},
    ...
}

Invece di modificare subito il prototipo.

Sto aspettando che l'autore mi dica che includiamo queste funzioni nel prototipo perché saranno copie esatte in carbonio che l'utente non può modificare e quindi devono solo definirle una volta (nel prototipo) piuttosto che su ogni istanza di un utente.

O sta solo cercando di dimostrare i diversi sapori dell'ereditarietà?

Grazie in anticipo!

    
posta Helix 09.02.2014 - 03:09
fonte

1 risposta

0

Il costruttore è usato per creare uno stato diverso per ogni nuovo oggetto. Si desidera uno stato diverso per ciascun oggetto Utente, ma si desidera che metodi come saveScore siano condivisi tra gli oggetti Utente. Il posizionamento del metodo saveScore nel prototipo è un modo per condividere il metodo tra gli oggetti.

A parte, non si deve sovrascrivere il prototipo: User.prototype = {...}, si dovrebbe aggiungere al prototipo: User.prototype.saveScore = function (...) {...}.

    
risposta data 09.02.2014 - 18:19
fonte

Leggi altre domande sui tag