javascript - method - Quali sono le sfumature dell'eredità prototipo/prototipo dell'oscilloscopio in AngularJS?




use prototype javascript (2)

La pagina Scope Reference Scope dice:

Un ambito può ereditare da un ambito genitore.

La pagina Scope della Guida per sviluppatori dice:

Un ambito (prototipicamente) eredita proprietà dall'ambito principale.

Quindi, un ambito figlio eredita sempre prototipicamente dal suo ambito genitore? Ci sono delle eccezioni? Quando eredita, è sempre normale l'ereditarietà prototipale di JavaScript?


Non voglio in alcun modo competere con la risposta di Mark, ma volevo solo evidenziare il pezzo che alla fine ha fatto in modo che tutto scattasse come qualcuno nuovo dell'ereditarietà di Javascript e della sua catena di prototipi .

Solo la proprietà legge la ricerca della catena del prototipo, non scrive. Quindi quando si imposta

myObject.prop = '123';

Non controlla la catena, ma quando si imposta

myObject.myThing.prop = '123';

c'è una sottile lettura in corso in quell'operazione di scrittura che tenta di cercare myThing prima di scrivere al suo prop. Ecco perché scrivere a object.properties dal bambino arriva agli oggetti del genitore.


Vorrei aggiungere un esempio di ereditarietà prototipica con javascript alla risposta di @Scott Driscoll. Useremo il modello di ereditarietà classica con Object.create () che fa parte delle specifiche di EcmaScript 5.

Per prima cosa creiamo la funzione dell'oggetto "Parent"

function Parent(){

}

Quindi aggiungere un prototipo alla funzione dell'oggetto "Genitore"

 Parent.prototype = {
 primitive : 1,
 object : {
    one : 1
   }
}

Crea la funzione oggetto "Bambino"

function Child(){

}

Assegna prototipo figlio (Crea prototipo figlio ereditato dal prototipo padre)

Child.prototype = Object.create(Parent.prototype);

Assegnare un prototipo di costruttore prototipo "Bambino"

Child.prototype.constructor = Child;

Aggiungi il metodo "changeProps" a un prototipo figlio, che riscriverà il valore della proprietà "primitiva" nell'oggetto Child e cambierà il valore "object.one" sia negli oggetti Child e Parent.

Child.prototype.changeProps = function(){
    this.primitive = 2;
    this.object.one = 2;
};

Inizia oggetti padre (padre) e figlio (figlio).

var dad = new Parent();
var son = new Child();

Chiama Child (son) changeProps method

son.changeProps();

Controlla i risultati.

La proprietà primitiva del genitore non è cambiata

console.log(dad.primitive); /* 1 */

Proprietà primitiva figlio modificata (riscritta)

console.log(son.primitive); /* 2 */

Proprietà oggetto padre e figlio. Modificato

console.log(dad.object.one); /* 2 */
console.log(son.object.one); /* 2 */

Esempio di lavoro qui http://jsbin.com/xexurukiso/1/edit/

Maggiori informazioni su Object.create qui https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/create







prototypal-inheritance