任何人都可以推荐在javascript中使用特征的好资源吗?经过一番搜索之后,我主要找到有关提供特征功能的图书馆的文章,但我对如何在没有图书馆的情况下实施特质的最佳实践感到好奇。Javascript特征模式资源
我在这篇文章中遇到过,有没有其他方法? Traits in javascript
任何现实世界的例子都会受到欢迎。
谢谢。
任何人都可以推荐在javascript中使用特征的好资源吗?经过一番搜索之后,我主要找到有关提供特征功能的图书馆的文章,但我对如何在没有图书馆的情况下实施特质的最佳实践感到好奇。Javascript特征模式资源
我在这篇文章中遇到过,有没有其他方法? Traits in javascript
任何现实世界的例子都会受到欢迎。
谢谢。
我会建议简单的东西,沿着线:
让特质被定义为标准的JavaScript对象。
var equalsTrait = {
eq: function(obj) {
return this == obj
},
neq: function(obj) {
return ! this.eq(obj)
}
};
编写一个函数来扩展一个给定的类与特性(它在全球范围内绑定到一个合理的位置):
window.Traits = {};
Traits.addToClass = function(traits, cls) {
for (var key in traits) {
if (cls.prototype[key]) {
alert("Class " + cls + " already has a method named " + key + "!");
}
else {
cls.prototype[key] = traits[key];
}
}
}
一些(有限)关于trait.js文库中的特征的信息
不是关于Javascript,而是关于遗传系统和特征“Traits: A Mechanism for Fine-grained Reuse”的好文章。实现细节的描述可以在“Applying Traits to the Smalltalk Collection Hierarchy”中找到。在this page上列出的这种类型的更多论文。
两篇论文那些描述库无关的纯函数基于密新和特质,从2011年5月和The many talents of JavaScript for generalizing Role Oriented Programming approaches like Traits and Mixins从2014年4月接近对JavaScript的A fresh look at JavaScript Mixins安格斯·克罗尔
这么久
附录I
请参阅:
附录II
由于不时我显然这件事情我wan't一些最后的想法添加到它的小提琴......
没有太多胶合代码的库不可知的方法(如上所述)只适用于行为重用的非常细粒度的可组合单元。因此,只要没有遇到超过1或2个容易解决的冲突,基于例如安格斯克罗尔的Flight Mixins是遵循的路径。
如果涉及真正的特征,那就必须有一个抽象层次。这一层(例如像DSL那样的某种语法糖提供)需要隐藏复杂性,例如从特征构成特征或在特征上解决冲突适用时间(当特征的行为应用于对象/类型时)。
现在有在SO 3个例子,从我的角度提供正是OP没问...
任何现实世界的例子将受到欢迎,以及。
您可以使用功能来实现没有图书馆的特质。
见工作示例Traits + Inheritance
由于dbarbeau
// Usage __traits(TargetClass, Trait1, Trait2, ...);
// Mix multiple definitions as traits. Properties will be overwritten if names are duplicating.
function __traits(mixtureTarget) {
for(var a=1; a < arguments.length; ++a) {
var mixin = arguments[a];
for (var p in mixin){ if (mixin.hasOwnProperty(p)){ mixtureTarget[p] = mixin[p]; } };
Object.getOwnPropertyNames(mixin.prototype).forEach(function(name) {
mixtureTarget.prototype[name] = mixin.prototype[name];
});
};
};
感谢您的例子。因此,从模式的角度来看,你认为应该满足哪些标准才能正确执行特征?特征是可以由任何对象实现的可重复使用的功能。除此之外还有其他什么?我在图书馆看到他们处理命名空间冲突。在你的例子中,特征被复制到每一个创建的实例,它会更好(如果甚至可取的话)在所有实例之间共享特征? –