我一直在寻找新的模式,以使代码更好地运行并提高其可读性。
我正在使用这样的方法在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代码。任何人都可以看到任何理由不将这种风格/技术用于上述解释的目的吗?
非常感谢!
答案 0 :(得分:2)
这似乎违反直觉。例如,JS并不是C#和Java等经典的OO语言。甚至SomeClass.set()也不是一个静态方法,因为如果你扩展SomeClass,set()会在它的子句中被引用。
您基本上以复杂的方式完成与传统的Constructor.prototype.myMethod语法相同的事情。虽然它可能看起来更像“可读”。我认为其意图超出了大多数JS开发人员习惯的范围。我说坚持惯例,除非你解决的问题需要别的东西。