2017-01-29 90 views
1

我正在开发一个JQuery插件。我需要在我的插件中使用OOP。但是,班级没有像我期望的那样工作。当我启动该类的新实例时,它只是其正在执行的代码的第一行。这段代码有什么问题,以及如何在启动时执行这个类的构造函数?JQuery插件类不工作

(function ($) { 
    var FunClass; 

    FunClass = function() { 
    console.log("FunGlobal"); 

    function FunClass() { 
     console.log("FunConstructor"); 
    } 

    FunClass.prototype.letsFun = function() { 
     console.log("FunMethod"); 
    } 
    }(); 

    $.fn.fun = function() { 
    var funClass; 

    return this.each(function() { 
     funClass = new FunClass(); 
     funClass.letsFun(); 
    }); 
    }; 
}(jQuery)); 

这里是控制台输出:Console Output

感谢您的帮助。

+0

你如何启动类的新实例? –

+0

让我们在这里清楚,你没有一个类 - 你有一个函数,这是一个对象。对象的所有方法都应该在函数的原型上声明,而不是写入构造函数本身的主体中。 –

+0

我以这段代码为例:[link](https://github.com/ludo/jquery-treetable/blob/master/jquery.treetable.js)。有使用这种方法(节点和树)。正如你所说@ScottMarcus我应该在原型上声明所有方法?那么我应该如何为这个类调用构造函数? – BigSant

回答

0

看来你已经忘记返回FunClass

(function($) { 
 
    var FunClass; 
 

 
    FunClass = (function() { 
 
    console.log("FunGlobal"); 
 

 
    function FunClass() { 
 
     console.log("FunConstructor"); 
 
    } 
 

 
    FunClass.prototype.letsFun = function() { 
 
     console.log("FunMethod"); 
 
    } 
 
    return FunClass; // you missed this line 
 
    })(); 
 

 
    $.fn.fun = function() { 
 
    var funClass; 
 

 
    return this.each(function() { 
 
     funClass = new FunClass(); 
 
     funClass.letsFun(); 
 
    }); 
 
    }; 
 
}(jQuery)); 
 

 
// Usage 
 
$(function() { 
 
    $('body').fun(); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+1

非常感谢。这样可行! – BigSant