2011-03-19 80 views
0

我想擴展這個函數並創建自己的函數,這個新的函數應該和舊的函數具有相同的功能,但是附加的OClick已經被我自己的函數覆蓋了。如何擴展這個jQuery函數

我該怎麼做?

(function ($) { 
    $.LocationDialog = { 
     mainInit: function() 
     { 
      //some code here 
     }, 

     init: function(callingNum) 
     { 
      //some code here 
     }, 

     additionalOkClicked: function() 
     { 
      //i want to override this function 
     } 
    }; 
})(jQuery); 
+0

你爲什麼不只是刪除代碼,而不是' additionalOkClicked'並編寫你自己的? – TrexXx 2011-03-19 17:12:16

+0

我需要擴展這個函數來覆蓋裏面的方法而不是創建新的或編輯相同的函數。我需要擴展原因舊將使用相同,但新功能將在特殊情況下使用 – dfilkovi 2011-03-19 17:18:12

回答

0

使用原型:

$.locationDialog.prototype.functionName = function() { 
    // Your code here 
} 

$.locationDialog.additionalOkClicked.prototype.functionName = function() { 
    // Code here 
} 

或只是創建$ .locationDialog內另一個功能:

(function ($) { 
    $.LocationDialog = { 
     mainInit: function() 
     { 
      //some code here 
     }, 

     init: function(callingNum) 
     { 
      //some code here 
     }, 

     additionalOkClicked: function() 
     { 
      //some code here 
     } 

     functionName: function() { 
      // Your code here 
     } 
    }; 
})(jQuery); 
+0

我需要擴展此功能以覆蓋內部方法不創建新的或編輯相同的功能。我需要延長。原型會改變現有的方法,所以舊功能將無法按預期工作,我需要兩種情況。 – dfilkovi 2011-03-19 17:17:41

+0

@dfilkovi Shaz提到的原型語法應該可以工作。 – mattalxndr 2011-03-19 17:19:33

+0

不,它不會工作原因舊的功能將被改變,如果有人想要使用以前的$ .LocationDialog它將與新功能,我需要新的$ .LocationDialogExtended與新功能,我不想改變舊的功能。 – dfilkovi 2011-03-19 17:41:27

0

您只需將代碼添加到刪除該功能,然後創建y我們自己的同名:

(function ($) { 
    delete $.LocationDialog.additionalOkClicked; 

    $.LocationDialog.additionalOkClicked = function() { 
    // your code here 
    }; 
})(jQuery); 

其餘的$.LocationDialog對象將保持不變。

1

你就不能這樣做:

$.LocationDialog.myAdditionalOnClick = function() 
{ 
    this.additionalOnClick(); //call the other method in the object. 
} 

如果y我們談論的功能被綁定到一個事件,然後使用:

$('#foo').unbind('click',$.LocationDialog.additionalOnClick); 
$('#foo').bind('click',$.LocationDialog.myAdditionalOnClick);