【发布时间】:2016-07-30 18:18:39
【问题描述】:
背景
在过去的几个月里,我一直在使用 OOP 风格的 Javascript,从剖析开源库开始。似乎它们大多遵循相同的模式,除了我已经看到了两种处理私有函数的方法,我想知道哪种方法最好(在最佳实践中最好,或者由于我可能不知道的原因更好)。
示例代码
下面是我正在使用的模式的一个非常精简的骨架。如果您注意到,有两种不同形式的私有函数。
第一个像公共函数一样附加到原型,但前缀为_。
第二个只是一个作用域只能由类访问的函数。
(function(window) {
window.FooBarClass = (function() {
var Class = function( params ) {
this._init( params );
}
/***************************************/
/************* INITIALIZE **************/
/***************************************/
Class.prototype._init = function( params ) {
// DO SETUP STUFF
};
/***************************************/
/********** PUBLIC FUNCTIONS ***********/
/***************************************/
Class.prototype.doThings = function() {
// DO STUFF
};
/***************************************/
/****** PRIVATE FUNCTIONS 1ST WAY ******/
/***************************************/
Class.prototype._createSection = function( params ) {
// DO STUFF
};
/***************************************/
/****** PRIVATE FUNCTIONS 2ND WAY ******/
/***************************************/
function correctTwoDigitYear( variable ) {
// DO STUFF
}
return Class;
}());
}(window));
问题
哪些更可取,为什么?
【问题讨论】:
-
_init方法几乎总是一种反模式。只需将初始化权放在构造函数中即可。 -
这取决于您是否希望能够在闭包之外访问这些方法。
-
为什么使用
_init是反模式? -
@AndyM:正如我所说,初始化应该在构造函数中。无需将其提取到额外的方法中。
标签: javascript oop