これが、Javascriptにおけるクロージャの仕様です。利用するとよいでしょう。さん&quot;prototypeはメンバを持つオブジェクトであり、これではクロージャの入る余地はありません。したオブジェクトが必要ないので、間違いがありません。既存オブジェクトでのメソッド拝借つぎは宣言ではなく、実行時に拝借するパターンを見てみましょう。そこで、call関数を利用します。call関数は、すべての「関数」が暗黙的にメンバーとして持つ「関数」です。関数が関数を持つのは違和感があるかもしれません。継承して関数オブジェクトが生成されます。なるオブジェクトを指定ます。第2引数以降はその関数の引数を続けます。実行しなさい」という命令になります。次回以降はJavascriptについては、一旦ここで締めます。なんか、JavascriptばっかりでXPagesの話してないので。考えたんですが、これからは中級者向けというより、これまでのNotes技術者のための解説をしていこうかなと思ってます。NotesフォームとXPagesの違い、と言った観点ですかね。vistas先日九州Notesパートナー会で行った勉強会の資料を公開します。利用した場合の解説です。vistas九州のパートナー会で作成しているQAアプリで必要になったので調査しました。要件としては「入力された半角・全角をどちらかに統一したい」ということ。英数は半角で、カナは全角で統一するのがすっきしますよね。いうことで調べてみました。ICU4JというJavaライブラリがあるんですね。これを使えば簡単そうです。この例の他にも、変換の方法が色いろあるようです。準備ICUのサイトからICU4Jをダウンロードする。lib」に「icu4j-52_1.jar」をコピーする。XPagesを作って下記をコピペしたら動きます。vistasみなさん!XPages開発していますか!?今回から数回に分けてオブジェクトの継承について話したいと思います。前回、prototypeの説明をしましたが、それも1つの継承です。JavaScriptではオブジェクトのすべてを、コンストラクタ関数を使用して作成することは多くありません。手軽に継承する方法が幾つかあります。ミックスインミックスインとは2つ以上のオブジェクトのすべてのメンバーを持つ1つのオブジェクトに統合することです。多重継承に近い概念でしょうか。JavaScriptでの用途としては、ある関数の引数にオブジェクトを渡すこととして、そのオブジェクには設定しなくてもよいメンバーがあるとします。設定されなかったメンバーは関数内でのデフォルト値が設定されることつぃます。下記の例では、ユーザー登録関数に姓名と年齢、性別を持つオブジェクトを渡すことを想定しています。年齢と性別は渡さなくても良いですが、その場合は、デフォルト値として"-1"と"N"が設定されるようにします。ミックスインを使用しない場合は、ifで個々を判断する必要があります。この例では2つのプロパティだけなので、それほど大変ではありませんが、メンバーの数が増えてくると大変なのは想像できると思います。そこで、ミックスインを使用します。mixin関数は、for-inを利用してオブジェクトのメンバーをすべてコピーし、そのあとで継承するオブジェクトのメンバーをコピーすることで、継承するオブジェクトに含まれないかnull,undefindのものは継承元のオブジェクトのものが採用されます。次回は継承とは少し違いますが、他のオブジェクトのメソッドを利用する、「メソッド拝借」について解説します。みなさん!XPages開発していますか!?前回はコンストラクタ関数について説明しましたが、前回の方法ではnewを呼び出す度にfunctionが生成されるので、非効率です。//メソッド}prototypeこの問題を解決するにはprototypeを使用するのが簡単な解決方法です。Kenjiさん、こんにちは!prototypeはすべてのfunctionオブジェクトに存在する特殊なメンバーで、通常は上記のようにオブジェクトを保持します。上記のように、Userコンストラクタ関数ではsyaHelloメソッドはないにもかかわらず、呼び出せています。それは、「オブジェクトに存在しないメンバを呼ばれたときは、自身のprototypeオブジェクトを参照し、そこにあればそれを呼び出す」というjavascript特有の言語仕様があるためです。メモリ的にも同じものとなり、効率的です。プロパティがセットされます。プロパティが採用されます。prototypeチェーンさて、prototypeはオブジェクトですが、このオブジェクトにprototypeが定義されている場合は、どのような動作になるでしょうか?下記の例を見てみます。コンストラクタ関数から生成されます。コンストラクタ関数から生成したオブジェクトにメンバーを追加したものになります。プロパティを持ちます。これを利用して、クラスの継承的な実装が可能になりますが、これに関してはもう少し整理して別の機会に説明したいと思います。vistasみなさん!XPages開発していますか!?今回は、JavaScriptのコンストラクタ関数と強制newパターンを説明しましょう。コンストラクタ関数JavaScriptには、Javaなどのクラスの概念はありません。newでオブジェクトを作成したり、ArrayだとかDateだとかはクラスの概念で語られることが多いですよね。それらは正確にはクラスではなくコンストラクタ関数と呼ばれるものです。コンストラクタ関数は、ArrayやDateなどビルドインのものもありますが、自作することもできます。その記述は下記のように行います。Kenjiさん、こんにちは!コンストラクタ関数の内部では、thisは新しいオブジェクトであり、それにプロパティやメソッド(関数)を追加していくように記述します。お気づきかと思いますが、通常のメソッドと同じ記述ですよね。そのとおりで定義にコンストラクタ関数である特別な記述はありません。呼び出し方で、その関数が通常の関数として動作するかコンストラクタ関数として動作するかが決まります。newをつけて関数を呼び出したときは、内部では下記にような動作をします。新しい空のオブジェクトをthisして定義する関数の最後にthisを関数の戻り値とするnewを使わない場合、下記と同等となります。Kenjiさん、こんにちは!強制newコンストラクタ関数パターンコンストラクタ関数である特別な記述がないということは、newを付けなくても呼び出せてしまいます。その場合、thisは呼び出し元でのthisとなってしまいますので、意図しない動作になってしまいます。そこで、コンストラクタ関数では初めにthisが自信のコンストラクタ関数で生成されたものかを確認すことで、より安全に呼び出すことができます。上記で紹介したコンストラクタ関数ではその中で定義している関数(例でのsayHello)は、newで呼び出されるたびに生成されています。これは、内容が変わらない静的なメソッドなので、これでは非効率です。prototypeを利用することで、効率的な実装できます。ここでのnameやsayHelloはパブリックなメンバーになりますが、プライベートなものを作るには、クロージャを利用することで実現できますこれらについても、今後解説していきます。vistas*スライドを更新しました。ファイルも合わせて置き場所を変更しました。Notes技術者のためのWeb技術概論」の補足資料および質問受付のためのものです。私のセッションをご視聴いただけた方はもちろん、そうでない方も資料をみて質問・疑問等あれば、このエントリーのコメントに投稿して下さい。出来る限りの範囲でお応えしていきたいと思います。