任何人都可以推薦在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];
});
};
};
感謝您的例子。因此,從模式的角度來看,你認爲應該滿足哪些標準才能正確執行特徵?特徵是可以由任何對象實現的可重複使用的功能。除此之外還有其他什麼?我在圖書館看到他們處理命名空間衝突。在你的例子中,特徵被複制到每一個創建的實例,它會更好(如果甚至可取的話)在所有實例之間共享特徵? –