我想停止在javascript中使用OOP,而是使用委派
在涉猎javascript一段时间后,我逐渐相信OOP不是正确的方法,或者至少不是广泛的方法。有两个或三个继承级别是可以的,但像Java中那样使用完整的OOP似乎并不合适 该语言支持本机合成和委派。我只想用这个。然而,我在复制OOP的某些好处时遇到了困难 即:我想停止在javascript中使用OOP,而是使用委派,javascript,composition,delegation,Javascript,Composition,Delegation,在涉猎javascript一段时间后,我逐渐相信OOP不是正确的方法,或者至少不是广泛的方法。有两个或三个继承级别是可以的,但像Java中那样使用完整的OOP似乎并不合适 该语言支持本机合成和委派。我只想用这个。然而,我在复制OOP的某些好处时遇到了困难 即: 如何检查对象是否实现了特定行为?我想到了以下方法 检查对象是否有特定的方法。但这将意味着标准化方法名称,如果项目很大,它可能很快变得麻烦,并导致java问题(object.hasMethod('EmailRegexValidatorSi
- 检查对象是否有特定的方法。但这将意味着标准化方法名称,如果项目很大,它可能很快变得麻烦,并导致java问题(object.hasMethod('EmailRegexValidatorSimplesSuperLongNotConflictingMethodName'))…它只是解决了OOP的问题,而不是解决它。此外,我找不到有关查找是否存在方法的性能的信息
- 将每个合成的对象存储在一个数组中,并检查该对象是否包含合成器。类似于:object.hasComposite(compositorClass)…但这也不是很优雅,而且还是OOP,只是不是标准方式
- 让每个对象都有一个“implements”数组属性,并让对象负责说明它是否实现了某种行为,无论是通过组合还是本机实现的。灵活而简单,但需要记住一些约定。到目前为止,这是我首选的方法,但我仍在寻找
var a = {};
compositor.addDelegates(a,["validator", "accessManager", "databaseObject"]);
function getInputObject(type, validator){
var input = {};
compositor.addDelegates(input,[compositor,renderable("input"+type),"ajaxed"]);
if(validator){input.addDelegate(validator);}
return input;
}
这有意义吗
1) 如何检查对象是否实现了特定行为
大多数人不需要像这样测试方法的存在性
- 如果您想测试方法以进行分支并在发现或未发现的情况下执行不同的操作,那么您可能正在做一些邪恶的事情(这种
通常是OO代码中的一种代码气味)instanceof
- 如果您只是检查一个对象是否实现了一个用于错误检查的接口,那么它并不比不测试并在找不到该方法时抛出异常好多少。我不知道有谁会定期做这项检查,但我肯定有人在做
这个
,除非绝对必要<代码>这个非常灵活,在回调内部中断(我广泛用于迭代和异步内容),很容易忘记正确设置它。我尝试用更传统的方法来写作。例如:
This
This
我不知道,如果你找到了,告诉我:)2。好的,只要有一个验证器类,然后由TextInput和EmailInput类使用。。。我是说,当两个人