シーシュ、最近の質問はmootoolsの内部にもっと焦点を当てているようです。
私はコア開発者ではないので、私の知識の限りでは答えます。
Type
MooToolsのはClassに非常に似ていますが(実際、Classコンストラクター自体はTypeです)、データ/値と値のタイプに重点を置いています。また、ECMA仕様で定義されているネイティブタイプを拡張し、より柔軟にすることも目的としています。
String
一般的なデータ型( 、、、、Number
など)Array
について話すのは意味がないと思いますObject
。なぜそれらを拡張する必要があるのですか?さて、初心者にとって、ダクトタイピングはjsでは少し風変わりです。typeof {}; // object
、、typeof []; // object
などtypeof new Date(); // object
-すべての型がオブジェクトから継承され、それらをグループ化するのが論理的である場合でも、最も役立つわけではありません。コードの記述には役立ちません。
したがって、jsオブジェクトのコンテキストでは、コンストラクターオブジェクトから作成されます...
Typeが行うことは、コンストラクター関数を置き換えることではなく、新しいメソッドまたはプロパティを追加することによって既存のコンストラクターを変更することです。
例えば。new Type('Array', Array);
これにより、ネイティブの配列コンストラクターが一種の型オブジェクトに変わります。結果などを保存する必要はありません。これは、元の操作を変更し、操作のために開いたままにする1回限りの操作です。
typeOf(Array); // type
それで、何が違うのですか?さて、初心者にとってtypeOf([])
は、実際にそれが実際に何であるかを私たちに伝えることができるようになりました- array
。そして、ここで実際に起こることはこれです:object.extend(Type);
、魔法のビット。Typeオブジェクトで定義されているすべてのプロパティをターゲットオブジェクトにコピーします。これらは次の場所で確認できます。
https://github.com/mootools/mootools-core/blob/master/Source/Core/Core.js#L211-232
したがって、すぐに、新しく作成されたタイプはすべての重要なimplement
メソッドを取得しextend
ます。
さらに高度な方法として、ネイティブの配列コンストラクターに基づく新しい型を作成しましょう。
var foo = new Type('foo', Array),
a = new foo();
// it's a real boy!
a.push('hi');
// ['hi'], foo, object
console.log(a, typeOf(a), typeof a);
しかし、カスタムタイプが必要な場合はどうなりますか?魔法のような特別なものですか?引数2は実際には(匿名)関数である可能性があるため、問題ありません。
var Awesome = new Type('awesome', function(name, surname) {
// console.log('I R teh construct0r!');
this.name = name;
this.surname = surname;
});
// extend it a little.
Awesome.implement({
getName: function() {
return this.name;
},
getSurname: function() {
return this.surname;
}
});
var Dimitar = new Awesome('dimitar', 'christoff');
console.log(typeOf(Dimitar)); // awesome
console.log(Dimitar.getName()); // dimitar
別の例では、DOMEventを見てください。上記を採用し、より高速でスリムなオブジェクトタイプにします。https://github.com/mootools/mootools-core/blob/master/Source/Types/DOMEvent.js#L21
では、なぜそれはクラスではないのですか?なぜなら、クラスはより高価であり、イベントは常に発生するからです。
これがお役に立てば幸いです。より詳細な説明については、メーリングリストで質問し、最高のものを期待してください。おそらく、コア開発者はあなたの標準ではないので時間がかかるでしょう。「アコーディオンを機能させるにはどうすればよいですか」タイプの質問...