如何在Javascript中覆盖函数

时间:2013-03-08 17:10:02

标签: javascript jquery

我有以下脚本:

<script ... jquery-1.9.1.js"></script>
<script ... dataTables.js"></script>    
<script ... columnFilter.js"></script>

columnFilter.js中存在以下代码:

(function ($) {

   $.fn.columnFilter = function (options) {
       //some code...

       function _fnCreateCheckbox(oTable, aData) {
           //some code...
       }

   };

})(jQuery);

我想要做的是用我自己的代码覆盖function _fnCreateCheckbox(oTable, aData)。我是一个相当新的JavaScript,所以会很感激一个例子。

我尝试过简单地抓取上面的代码并将其添加到自己的<script>标签中,但这不起作用。它完全阻止了columnFilter.js的工作(我猜这是预期的)。不确定还有什么可以尝试。

3 个答案:

答案 0 :(得分:8)

function _fnCreateCheckbox(oTable, aData) {

仅存在于创建它的范围内,因为(function ($) {创建了一个函数范围。你必须在那里编辑它。你无法在功能之外覆盖它。

编辑:相关说明

如果你对JS非常狡猾并且你试图让这个函数有时只做其他事情,你可以将一些额外的变量传递给你的columnFilter插件/函数调用,并在该函数中处理它们以做其他事情。我不知道什么是列过滤器,但是我们假装在一个这样的元素上调用它:

el.columnFilter({optionA: true, optionB: false});

如果您想根据自己可以做的某些数据做其他事情,

el.columnFilter({optionA: true, optionB: false, extraOption: true});

然后在您的脚本中,取决于整个脚本的功能:

$.fn.columnFilter = function (options) {
   //some code...
   if(options.extraOption){
       function _fnCreateCheckbox(oTable, aData) {
           //some default code...
       }
   } else {
       function _fnCreateCheckbox(oTable, aData) {
           //my other code...
       }
   }
};

这是一个粗略的例子,但只是为了显示你的选择。

答案 1 :(得分:2)

我想您从某个外部源导入columnFilter.js文件。

一个选项可能是将columnFilter.js文件复制到项目目录中,根据需要进行修改,然后从项目目录中导入

答案 2 :(得分:1)

您可以通过重新分配原型来覆盖某个功能。但通常建议不要这样做。

var d = new Date();

alert(d.getFullYear()); // 2013

Date.prototype.getFullYear = function() { return "Full Year"; }

alert(d.getFullYear()); // "Full Year"

http://jsfiddle.net/js5YS/