2013-05-16 10 views
15

Qualcuno può aiutarmi a capire questo codice? Sembra troppo contorto per me.Estende in javascript

var __extends = this.__extends || function (d, b) { 
    function __() { this.constructor = d; } 
    __.prototype = b.prototype; 
    d.prototype = new __(); 
}; 


var PageView = (function (_super) { 
    "use strict"; 

    __extends(MyPageView, _super); 

function MyPageView(rootElement, viewModelParameter, calendarWeeksViewModel) { 
}); 


} 
+0

Duplicato di [Typescript e Google Closure] (http://stackoverflow.com/questions/13635901/typescript-and-google-closure), ma tale domanda è abbastanza gentile da spiegare da dove hanno ottenuto il codice. Ulteriori discussioni [qui] (http://stackoverflow.com/questions/5529285/prototype-chaining-constructor- ereditarietà). Puoi leggere l'ereditarietà prototipale javascript per saperne di più. –

risposta

12

Quindi, in pratica

__extends(MyPageView, _super); 

pensare in termini ofinheritance in un linguaggio Object Oriented. Dove una classe sta estendendo una classe Super o una classe base ..

Quindi fondamentalmente qui MyPageView estenderà la funzionalità e l'implementazione della super classe.

Quindi diciamo che la vista di base ha method A() and method B() e la vista corrente ha il metodo C(), quindi la vista corrente ha accesso a tutti e tre i metodi A() , B() and C() nella sua vista.

Ma diciamo MyPageView ha method B(), definito in esso, allora il metodo all'interno della vista avrà precedence over the Method B() of Super View

var __extends = this.__extends || function (d, b) { 
    function __() { this.constructor = d; } 
    __.prototype = b.prototype; 
    d.prototype = new __(); 
}; 

Ogni funzione ha una proprietà prototype magica.

var __extends = this.__extends || function (d, b) { 

Cheks se tale funzione è disponibile in tale contesto, se non definire una funzione, che prende 2 argomenti, l'oggetto che deve essere esteso e l'oggetto da cui si estende ..

function __() { this.constructor = d; } 

la definizione di una nuova funzione chiamata __ in cui tale costruttore proprietà del contesto è destinato a object d

__.prototype = b.prototype; 

La proprietà prototipo del Object __ è puntato alla catena b.prototype ..

d.prototype = new __(); 

L'Accesso di metodi di Super View accade qui, dove si sta impostando la proprietà di prototipi dell'oggetto qui ..

Così quando viene creata la nuova istanza, se il metodo non è disponibile, a causa dello prototype sull'oggetto, controllerà i metodi nello Super view perché è disponibile sulla funzione __ che è legata a object d

+0

Grazie mille !! Ma non riesco a capire cosa this.constructor = d; } __. Prototype = b.prototype; d.prototype = new __(); –

+0

@NishaShukla .. Controllare il codice aggiornato .. –

+0

Grazie mille !!! –