JavaScriptクラスと今後もうまくいけば のみを拡張することができますが、 を互いに組み合せることはできません。まったくの場合は、おそらく軽量の特性 は1日以内に指定してください。
アーキテクチャアプローチはJavaScript固有のものです。それ ここ数年でかなり頻繁に言及されています... esdiscuss.org:»about lightweight traits«、 github.com/WebReflection:»features :: with«、 webreflection.blogspot.com:»A future friendly, backward compatible, class utility«、 reddit.com/r/javascript:»Functional Mixins in ECMAScript 2015« 、 raganwald.com:»Functional Mixins in ECMAScript 2015« ... とおそらくアンガス・クロールのFlight Mixinsと比較しています。
ミックスイン/形質が近づいベースピュア機能... This is not an essay about 'Traits in Javascript'、 The many »Talents« of JavaScript ... OPはのようなもの ない限りを求める持っているものに近い来るのかは...
// proposed trait syntax ... // ... desugared e.g. to ...
trait Enumerable_first_last { // var Enumerable_first_last = (function() {
// trait body. // // mixin module.
//
const // var
FIRST = function() { // first = function() { // shared code.
return this[0]; // return this[0];
}, // },
LAST = function() { // last = function() {
return this[this.length - 1]; // return this[this.length - 1];
} // }
; // ;
//
applicator() { // return function Enumerable_first_last() {
// applicator body. // // mixin body.
//
this.first = FIRST; // this.first = first; // referencing ...
this.last = LAST; // this.last = last; // ... shared code.
} // };
//
} // }());
...
// proposed trait syntax ... // ... desugared e.g. to ...
trait Enumerable_item { // var Enumerable_item = (function() {
//
const // var
ITEM = function (idx) { // item = function (idx) {
return this[ // return this[
Math.floor( // Math.floor(
parseFloat(idx, 10) // parseFloat(idx, 10)
) // )
]; // ];
} // }
; // ;
//
applicator() { // return function Enumerable_item() {
//
this.item = ITEM; // this.item = item;
} // };
//
} // }());
...
// proposed trait syntax ... // ... desugared e.g. to ...
trait Enumerable_first_last_item { // var Enumerable_first_last_item = (function() {
//
use Enumerable_first_last; // return function Enumerable_first_last_item() {
use Enumerable_item; //
/* // Enumerable_first_last.call(this);
applicator() { // Enumerable_item.call(this);
// can be omitted if empty. // };
}*/ //
} // }());
// ... desugared e.g. to ...
//
class Queue { // var Queue = (function() {
//
//use Allocable; // return function Queue() {
use Observable; // var list = [];
//
constructor() { // this.enqueue = function (type) {
const list = []; //
// list.push(type);
this.enqueue = function (type) { // return type;
// };
list.push(type); // this.dequeue = function() {
return type; //
}; // return list.shift();
this.dequeue = function() { // };
//
return list.shift(); // //Allocable.call(this, ...);
}; // Observable.call(this);
} // };
//
} // }());
//
var q = new Queue; // var q = new Queue;
//
q.enqueue(9); // q.enqueue(9);
q.enqueue(8); // q.enqueue(8);
q.enqueue(7); // q.enqueue(7);
//
console.log(q.dequeue()); // console.log(q.dequeue());
console.log(q.dequeue()); // console.log(q.dequeue());
console.log(q.dequeue()); // console.log(q.dequeue());
//
console.log(q); // console.log(q);
console.log(Object.keys(q)); // console.log(Object.keys(q));
は... ... ECMAScriptの土地に出荷されました。
2/2 - (3)[レガシーmixinベースのクラス階層のリファクタリング](http://stackoverflow.com/questions/43027388/refactoring-legacy-mixin-based-class-hierarchies/43059101#43059101) [クラスを使った多重継承](http://stackoverflow.com/questions/41918874/multiple-inheritance-using-classes/43748183#43748183) –