使用构造函数作为静态方法的对象的OOP Javascript

时间:2016-02-09 20:22:01

标签: javascript oop design-patterns module

我一直在寻找新的模式,以使代码更好地运行并提高其可读性。

我正在使用这样的方法在init之前设置类的原型:

// Definition 

function SomeClass(){}

SomeClass.set = function(methName, fn){
    SomeClass.prototype[methName] = fn;
};

// Add a new method prior to initialization
SomeClass.set('doSomethingUnique', function(a, b){ return a / b * a - b });

// Instantiation
var test = new SomeClass();
test.doSomethingUnique(4, 5);

这样我就可以使用"自包含" setter是为了避免输入典型的SomeClass.prototype.doSomethingUnique = function(){...}。我也被允许使用静态方法而不实例化类,我觉得javascript类更加自由(并允许上面演示的行为类型。

我没有看到任何真正的负面因素,而且我认为这是一个代码改进,因为它使我的最终结果更加模块化和可读 - 这让我想知道为什么我不会看到这个通常是共同的O / S代码。任何人都可以看到任何理由不将这种风格/技术用于上述解释的目的吗?

非常感谢!

1 个答案:

答案 0 :(得分:2)

这似乎违反直觉。例如,JS并不是C#和Java等经典的OO语言。甚至SomeClass.set()也不是一个静态方法,因为如果你扩展SomeClass,set()会在它的子句中被引用。

您基本上以复杂的方式完成与传统的Constructor.prototype.myMethod语法相同的事情。虽然它可能看起来更像“可读”。我认为其意图超出了大多数JS开发人员习惯的范围。我说坚持惯例,除非你解决的问题需要别的东西。