JavaScriptでミックスイン実装問題はあなたがRubyの実装に、JavaScriptでスタイルのミックスインを簡単にオブジェクトの機能を拡張します。理論Rubyでは、 ミックスイン 別のオブジェクトの機能を採用することにより、オブジェクトの機能を拡張する方法です。するときには、JavaScriptの型、メソッドやプロパティの型と型の宣言に依存して関連付けられてインスタンス化します。インスタンスの機能を拡張するために、プロパティ、関数または別のオブジェクトに割り当てられている。 ソース: /サイト/ルート/ Ajaxの記事/ジャバスクリプト/ mixins.html関数DefinedClass()()DefinedClass.prototype.defined1 =関数()()DefinedClass.prototype.defined2 =関数()()
DefinedClass関数の型を定義するために使用されます。 2つのメソッドdefined1とdefined2、DefinedClassタイプに関連付けられている。各メソッドは、prototypeプロパティと、そのたびに、DefinedClassインスタンス化され、これらのメソッドは、同じ関数のインスタンスを共有する関連付けられている。したがって、もし、次にDefinedClassのすべてのインスタンスは、同じプロパティのインスタンスを共有することができますdefined1またはdefined2のプロパティを割り当てます。ソリューションDefinedClassのインスタンスを拡張するには、個別のインスタンスのプロパティを割り当てることができます。個別にコピーするプロパティは退屈です。効率的なソリューションを別のオブジェクトを1つのオブジェクトのプロパティをコピーすることです。 PrototypeやDojoツールキットなど、多くのフレームワークは、機能プロパティのコピーを提供します。次のプロトタイプのためのmixinの実装です。 ソース: /サイト/ルート/試作/ソース(プロパティ)(先の[プロパティ] =ソースの[プロパティ];)戻り先;のdistを/ prototype.jsのObject.extend =関数(宛先、送信元)( Object.extend関数は2つのパラメータ:宛先とソースがあります。先のパラメータは、プロパティが追加されるオブジェクトを表します。 sourceパラメータは、そのプロパティをコピーする必要がありますオブジェクトを表します。プロパティのforループはそれは不可能です他の方法でオブジェクトのインスタンスのプロパティを反復するために使用してコピーされます。プロパティの識別子ではなく、プロパティの値は、反復されます。プロパティ値を取得するには、この表記法を使用して、次の構文:source.propertyこの問題は、使用することは、プロパティを明示的に定義され、それを使用してミックスインの関数を実装するのコンテキスト内で複雑です。このソリューションは、JavaScriptの配列の表記法を使用し、配列としてプロパティを取得します。戻るプロトタイプソリューションに行くには、ソースの各プロパティが反復されると、値が取得され、宛先に割り当てられるのメソッドは次のオブジェクトのインスタンスを宣言を使用して拡張適用してみましょう。 ソース: /サイト/ルート/ Ajaxの記事/ジャバスクリプト/ mixins.html MyExtensions =(テスト:(tstValue)(assertEquals(tstValue、MyExtensions.test.value);))関数 MyExtensionsクラスの宣言は、Object型のインスタンスが1つの組み込みプロパティへの静的参照されます。我々はDefinedClassのインスタンスにプロパティをコピーするように、次のテストに示すようにします。 ソース: /サイト/ルート/ Ajaxの記事/ジャバスクリプト/ mixins.html prototype_mixin:関数()(ヴァール分類=新しいDefinedClass();場合(MyExtensions.test.value)(testManager.failed();)Object.extend(分類、MyExtensions ); cls.test.value = 3;(3); cls.test.value = 10; cls.test(10);)、cls.test テストコードをObject.extendの単純な呼び出しを越えて行くが、ほとんどのツールキットミックスインアヒル型の参照に基づいて使用して実装がわかります。それが、間違ってはいないため、関数は、複数のクラス型の間で共有されるオブジェクトです。このことを理解するために、MyExtensions.testの実装を見てください。実装参照test.value関数プロパティとクロスtstValueパラメータを参照する。 prototype_mixin関数は、DefinedClassのインスタンスの実装では、作成され、その後MyExtensionsのメソッドを延長した。 cls.test.valueプロパティ、および3の値が代入されているテストメソッドが呼び出されます。 テストの実施3としてMyExtensions.test.valueの値を確認します。場合、clsのテストメソッドMyExtension.testメソッドをコピーして、これMyExtensions.test.valueが割り当てられていないが、テストとして、もしテストブロックからも明らかな失敗していた。しかし、テストコードは、これはcls.testとMyExtensions.testている1と同じ方法。引用ベースのアヒルの入力を示して失敗しないように、そのうちの一つは、次のコードで表示されるいくつかの奇妙な行動をしています。 ソース: /サイト/ルート/ Ajaxの記事/ジャバスクリプト/ mixins.html関数GetExtensionFunctionality()(テスト:(tstValue)(assertEquals関数(this.test.value)tstValue;)))prototype_inconsistent_mixin:関数()(ヴァールcls1 =返す新しいDefinedClass();ヴァールcls2 =新しいDefinedClass(); Object.extend(cls1、GetExtensionFunctionality()); Object.extend(cls2、GetExtensionFunctionality()); cls1.test.value = 3;(cls2.test(3しよう);))をキャッチ(オ)((e.jsUnitMessage)(情報("prototype_inconsistent_mixin"、"期待される例外("+ e.jsUnitMessage + ")");))) ここでは、拡張機能のメソッド呼び出しのコンテキスト内で定義されています。前の例では、テストメソッドは、複数のクラスによって共有されました。テストcls1とcls2でも、同じ試験方法を共有する必要があります。テストコードを実行すると予測される例外は、cls.test.valueことを示すには3の値がない場合になります。一言で言えば、この問題は、Object.extendの呼び出しの2つの方法があり、完全に動作が異なるため、2つを取得されのため、いくつかの奇妙な動作を得る可能性があります値の性質を参照するようにベースのカモを入力します。それは何かを認識する必要があるが、もちろん、反論される可能性がされた場合は、prototypeプロパティの性質を考える、行動の結果は、同じ並べ替えます。私の場合もその例では、プロトタイプの識別子を使用していない実感しているものとします。 JavaScript開発者は、プロトタイプの影響、およびそのときに、使用するときにキーワードを使用しないことを知っていることは知っている。この記事の例では、プロトタイプの動作プロトタイプを使用せずに説明された。我々はこのような状況については知っている2つのミックスイン方法:ある1つは、コピーを参照(参照アヒルの入力)と1つの完全なコピー(値アヒルのタイピング)はありません。完全な値鴨ベースのmixinの実装型指定された次のとおり。 ソース: /サイト/ルート/スクリプト/ jaxson / common.jsミックスイン:関数(copyTo、コピー元、forceCopy)( ヴァールcopiedFrom = eval((コピー元))ops.singleSerialize;コピー元の(プロパティ)(場合((copyTo [プロパティ]&&強制的に)| |!copyTo [プロパティ])(copyTo [プロパティ] = copiedFrom [プロパティ];))) mixinのメソッドの実装では、最初のステップはコピーされるインスタンスのバッファを生成するために()ops.singleSerializeして、バッファevalを用いて実行される。バッファを生成するプロセスと、それは、オブジェクトとそのプロパティを目的のクローニングの効果が実行する。その時、クローンで、オブジェクトを拡張することが反復され、ではなく、元のオブジェクトは、複製されたオブジェクトへの参照しています。これは、ソースオブジェクトのプロパティをコピーしている要件は、オブジェクトを拡張することが満たしています。 記事のソースコードでは、またops.refMixin、これは他のmixinの実装と同様に動作し、オブジェクトへの参照を割り当てますを拡張するという方法を見つけるでしょう。実装する場合はミックスイン、心の中で、次の点を維持: •Mixinは別のオブジェクトの機能を採用することにより、オブジェクトの機能を拡張する方法です。 JavaScriptでは、参照をコピーするか、または直接機能をコピーすることによって、この手法を複製することができます。 •Mixinは、プロトタイプのフォームのプログラミングでは、オブジェクトの動作を実行時に決定されています。 •現在、およびプロパティの機能の一部を記述しないことがありますので、その参照をコピーする問題ではないと思う。しかし、了承される:もしあなたのソースオブジェクトを参照するプロパティは、オブジェクトを参照すると、そのオブジェクトがコピーされていないオブジェクトではなく参照。 •あなたが広範囲ときは、これがあなたのオブジェクトとリファレンスを慎重にされるJavaScriptコードを書くミックスインを使用します。 記事は、ソニアLandeを提出 免責事項:弊社のウェブサイトは、この資料の内容については責任を負いません。 Webarticles無料の情報リソースです。 重要: この記事は、"JavaScriptでミックスイン実装"自動ソフトウェアによって翻訳された。大変申し訳ございませんが発生した可能性があります任意のスペルミスを感じている。お客様のご理解いただき、ありがとうございます。
|
|||||
| Online: 203 users browsing the articles directory |
|
|