2013-05-16 48 views
15

有人可以幫我理解這段代碼嗎?似乎對我來說過於複雜。在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

[Typescript和Google Closure]的副本(http://stackoverflow.com/questions/13635901/typescript-and-google-closure),但該問題足以解釋他們從哪裏獲得代碼。進一步討論[這裏](http://stackoverflow.com/questions/5529285/prototype-chaining-constructor-inheritance)。您可以閱讀JavaScript原型繼承以瞭解更多信息。 –

回答

12

所以基本上

__extends(MyPageView, _super); 

想想而言在面向對象的語言ofinheritance。凡一個類正在擴展一個超類或基類。

所以基本上這裏MyPageView將擴展超類的功能和實現。

因此,讓我們說基地查看有method A() and method B()和當前查看有方法C(),那麼你當前視圖有權訪問它的視圖中的所有三個方法A() , B() and C()

但可以說MyPageViewmethod B(),在其中定義,然後查看裏面的方法將採取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 __(); 
}; 

每個函數都有一個神奇的原型屬性。

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

檢測開關如果該功能是在這方面可用的,如果沒有定義一個函數,即需要兩個參數,即要擴展的對象,並從它的延伸物體..

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

定義一個新的函數調用__其中上下文是構造屬性綁定到object d

__.prototype = b.prototype; 

Object __的原型屬性指向b.prototype鏈..

d.prototype = new __(); 

Super View發生在這裏,你在哪裏設置,這裏的對象的原型屬性方法的訪問..

所以當創建新實例時,如果方法不可用,則由於該對象上的prototype,它將檢查Super view中的方法,因爲它在功能__上可用,該函數與object d

+0

非常感謝!但我不明白什麼this.constructor = d; } __。prototype = b.prototype; d.prototype = new __(); –

+0

@NishaShukla ..檢查更新代碼.. –

+0

非常感謝! –