2016-03-07 41 views
-1

我是面向對象的js的新手。在我的工作中,我必須編輯一些其他人完成的代碼。由於我是這個領域的新手,無法理解一些結構和符號。貝婁的結構,我無法處理,面向對象的結構js

(function ($) { 
    AjaxSolr.GenericGraphWidget = AjaxSolr.AbstractFacetWidget.extend({ 

     _functionName:function(){ 
     } 

    })(jQuery); 

現在,這裏AjaxSolr是這是在另一個文件中定義的基類。 AbstractFacetWidget也是從AjaxSolr延伸的類。現在任何人都可以解釋一下,這是什麼樣的結構?(我只知道這是一種類,就像其他類的oop語言一樣)。 (function ($)是什麼意思?

我所知道的現在,直到創建對象和繼承我要做像以下各項

var Constructor = function(name) { 
    this.name = name 
}; 

Constructor.prototype.mymethod = function() { 
    alert("my name is : " + this.name); 
}; 

var obj = new Constructor("foo"); 
obj.mymethod(); 

可能是他們使用,我不知道另一種格式。如果我想從該課外調用該課程的功能,我該怎麼做?如果我的問題解釋不好,請問我。

+1

我看你是來自OOP語言。我的建議是不用構造函數,只是學會閱讀它,因爲很多人沒有理由使用它。至於你自己使用工廠功能。 – PVL

+1

相關:http://stackoverflow.com/questions/8228281/what-is-the-function-construct-in-javascript – charlietfl

回答

0

通常,.extend({...})表示「取其原型併合並提供的對象」。所以extend創建一個新的對象,並設置爲AjaxSolr.GenericGraphWidget。這樣,您可以像其他OOP語言中常見的那樣執行類似於繼承的操作。

我想你刪除了一些部分,所以我希望以下適用於您的具體示例:(function ($) { ... })(jQuery);是一種編寫立即調用的函數表達式的方法:它創建一個匿名函數(function ($) { ... have $ available here ... })並直接調用它參數(在這種情況下爲jQuery)。

+0

因此,當我加載頁面這個函數被調用與「jquery」參數$賦予「jquery」。不是嗎? –

+0

是的,在這種情況下'$ === jQuery'。 – Narigo

+0

嗨,另一件事,是AjaxSolr.GenericGraphWidget是一個類?我可以創建對象var a = new AjaxSolr.GenericGraphWidget();這個。我必須在某個事件觸發後調用其中的函數。 –