アヒル型指定されたコードの及ぼす影響を理解する

アヒル型指定されたコードの及ぼす影響を理解する

  

問題はどこに最大限に活用アヒルと入力し、ときにあるとの間の違いがあります。理論それを使用して認識される必要のある問題を理解したい 値の型 参照型 JavaScriptをした。参照型でも、ある値、または純粋な参考資料としては、リファレンスを定義するの間に違いはありません。しかし、あなたも、違いを気にする必要があります?何かを認識する必要があるでしょうか?場合は、プロトタイプの定義を介して型を定義することができますこのときに何かを具体的には、JavaScriptを行うとしているですでは、アヒル型の、潜在的な型を持つユニークな言語であり、プロトタイプの特性です。JavaScriptの型を作成するか、またはすることができますクラスのインスタンスを割り当てることによって、メソッドとプロパティを定義します。一般的には、あなたの能力を動的に一緒に、実行時の型ワイヤにしている。またカモを入力:値型と参照型を実装する2つの方法があります。ただし、この資料に記載Imostly - typeの値アヒルの入力を使用する場合、両方の種類を認識する必要がある。私は1つだけでは、それぞれの長所と短所が他より優れているとは言わないです。開発者以上のいずれかを選択する傾向があるが、他のプログラミング習慣に基づいて。ので、後で使用するためのオブジェクトをシリアル化する傾向がある例えば、私は値をカモ入力を好む。ソリューションのカモの例では、参照値を使用して入力を介して行ってみましょう。どのパラメータがなく、その状態を格納する関数を作成するために使用されている、次のコードを考えます。

 ソース: /クライアント/ ajaxrestrecipes / javascriptに/ valuevsreferencetypes.js、値)(return関数CallMeReference(toCall関数()(toCall(値);))

上記のコードでは、CallMeReference関数は2つのパラメータ:toCall、これは関数であり、値は、状態関数toCall呼び出すために使用されています。 CallMeReferenceの背後にある考え方は、パラメータを持つ関数を作成することですが、いくつかの状態を以前の定義を使用して呼び出されます。次のコード例を実行するために使用される可能性:

ヴァールfunc = CallMeReference(関数(param)は(情報("paramされます("+ param + ")");)に"hello world"); func()の;

この例では、func変数をカプセル化された"hello world"のメッセージを生成するために使用されます。 funcは、変数を繰り返し呼び出すことができます同じメッセージが生成されます。この変数は、他の変数と同じメッセージに生成される割り当てられることができる。ため、我々のプログラマーは、我々は、Builderパターンに従うと、特定の状態を持つ関数を事前に作成関数を作成します。次の2つの関数は、Builderパターンを実装する:

関数Version1Reference()(戻りCallMeReference(関数(param)は(情報("バージョンは1です("+ param + ")");)、➥に"hello world");)関数Version2Reference()(戻りCallMeReference(関数(param )(情報("バージョンは2です("+ param + ")");)、➥に"hello world");)

Version1ReferenceとVersion2Reference機能のわずかな違いを持つ関数を生成します。結果として生成された関数の変数に割り当てることができますし、前の例のように呼ばれる。この点は、すべて私が示されているに開設する場合、Cなどの伝統的なプログラミング言語を使用して行うことが何か#、JavaおよびC + +。ただし、ここでは、JavaScriptのは、カモを入力してプロトタイプベースの機能は、もし関数を変数に代入されている、どのように代入が起きたのか分からないことを実装して使用している。これは必要なのは代入C言語での問題かしない+でした知っている+、C#、またはJavaのため、プログラマは、順序の種類を前に時間のレイアウトを定義し、順序を変更することはできません実行時に。 JavaScriptでは、この順序で前の時間を実行時に定義されて定義されていません。たとえば、次のコードが可能です:

の場合(フラグ)を参照します(func = Version1Reference();)他の参照します(func = Version2Reference();)

ときにfuncを知らない割り当てられている場合は、Version1ReferenceまたはVersion2Referenceからのコードを使用して割り当てられていた。ときは、割り当てられたコードが実行されている場合Version1ReferenceまたはVersion2Reference関数を使用した場合、論理的に行動から判断することができます。これするときは、次のコードが生成されます:変数funcをシリアル化する私は、あなたのコードが割り当てられていたか分からないと言う理由がある

関数()(toCall(値);)

生成されたコードは、toCallと値を変数に割り当てられているがわかりますが、あなたを知っていないか。場合は、オブジェクトを参照する生成された関数をシリアル化しようとしてこの問題になることができます。場合は、関数と試行関数を実行するためにシリアル化のためtoCallと値を変数に定義されていないと、エラーが生成されるだろう。場合は、データメンバの状態をシリアル化することができますが、メソッドのシリアル化状態にすることlost.For例の原因は、住宅ローンのアプリケーションを書いて想像し、現在、クライアントを作成している。

クライアントは、一定の年齢に、アドレスを持って、プロファイル。伝統的なプログラミング環境では、あなたの状態をそれぞれするたびに状態がロードされるオブジェクトに関連付けること。ためのメソッドを含むオブジェクトの状態を、シリアル化される可能性がこの状態にロードされるたびに、意味は、適切なオブジェクト型を作成するさまざまなBuilderパターンの実装を実行する必要があります。JavaScriptを使用して、これは必要ではありません。これにより、完全なオブジェクトをシリアル化する可能性は、データベースに保存したり、別のコンテキストで実行することができます。動的な機能をCallMeReferenceのように変更する必要があることを意味値の型を使用する必要があります次のとおり:

関数CallMeValue(toCall、値)(戻り("関数()(ヴァールfunc ="+➥toCall.toString()+"; func('"+ value.toStringでeval()+"');)");)

を除いては、関数と連結され、実行される文字列バッファに値をシリアル化するCallMeValue関数CallMeReferenceのようです。実行結果は、機能するときにシリアル化され、次のバッファを生成します:

関数()(ヴァールfunc =(関数(param)は(情報("param("+ param + ")");});➥funcです(に"hello world");)

直列化された関数を正確に機能CallMeReferenceで作成されたように、しかし、動作は、関数の値をシリアル化できると、別のコンピュータまたは別のコンテキスト内で実行時に動的にワイヤを一緒にコードをするかどうかのプログラミングの参照または値を使用する方法について考える必要があるコードを書くテクニック。このようなコードを書くこと、親指は、次の規則を考慮:

•リファレンスカモの種類は、JavaScriptの実行の範囲内でのみ(例えば、HTMLページ)のライブ一時的なタイプと見なされる必要があります。

•リファレンスアヒル型Builderパターンを使用して作成されます。

•一度参照アヒル型若干のパフォーマンスの利点があるとして、彼らはBuilderパターンの実装では、evalステートメントを実行するのオーバーヘッドが不要を作成しました。

ので、参照を代入する•リファレンスカモの種類が複数のオブジェクトのインスタンスでインスタンスを共有することができます。

•値アヒル型長期シリアライズ可能なオブジェクトは、状態コードをシリアル化できると見なされる必要があります。

•値アヒル型Builderパターンを使用して作成されます。

これは、コードのシリアライズの結果です•値アヒル型若干参照アヒル型よりも、バッファを構築し、遅くなっている場合、バッファを評価する。

•値鴨の種類の機能が不規則に割り当てられたオブジェクトのインスタンスのために行動することの副作用はありません。ここでは、変数の状態をBuilderパターンに与えられる割り当てられているクリーンスレートなアプローチで、値はアヒル型Builderパターンの結果を呼び出すたびに。

記事は、ソニアLandeを提出


免責事項:弊社のウェブサイトは、この資料の内容については責任を負いません。 Webarticles無料の情報リソースです。
重要: この記事は、""アヒルの型指定されたコードの及ぼす影響を理解する自動ソフトウェアによって翻訳された。大変申し訳ございませんが発生した可能性があります任意のスペルミスを感じている。お客様のご理解いただき、ありがとうございます。


Online: 275 users browsing the articles directory