2008年8月25日月曜日

JavaScript の new 演算子についてのメモ

先日会社の勉強会で教わったのだけど、忘れそうなのでメモ。
勘違いして覚えてるかも・・・


function dummyObject(x,y){
this.x = x;
this.y = y;
}

var newObject = new dummyObject(2,5);


new で 空のオブジェクト作成

参照先として、自分自身のプロトタイプ (dummyObject.prototype) を設定

作成した空のオブジェクトを this として、引数はそのままで、関数の中身を実行。

左辺の変数に作成した空の(既に空じゃないけど)のオブジェクトへの参照を渡す。

この際の this.x , this.y は外部からは以下で参照できる。

newObject.x // 2
newObject.y // 5

以下のようにした場合はどうなるか?

var newObject = dummyObject(2,5)

newObject.x //undefined
newObject.y //undefined

this には window オブジェクトが入るため、参照できない。
参照する場合は、以下のような感じ。

window.x // 2
window.y // 5

=-=-=-=-=-=-=-=-=-=-=-=-=-=

ここからはブラウジングしてて以下の内容を見つけたので、参考(ほとんどそのままだけど・・・)にさせてもらいました。

【jQuery】Simple Class  Instantiation


以下のように定義すればいろいろ回避?
new した際は必ず this instanceof arguments.callee が true になるのか気になる。


function dummyObject(x,y){
if(this instanceof arguments.callee){
this.x = x;
this.y = y;
} else {
return new arguments.callee(x,y);
}
}




可変長引数の場合どうしたらいいんだろ・・・

function dummyObject(){
if(this instanceof arguments.callee){
this.init.apply(this,arguments);
} else {
return new arguments.callee(ここの引数が分からない);
}
}


return new arguments.callee(arguments); とすると applyの際に [arguments] が渡るし・・・

と思ってもう一回よく読んだら答えが書いてあった・・・
第一引数が callee プロパティを持っていたら内部で new したこと確定か。。。
今日一日悩んでて気づかなかった。orz

function dummyObject(args){
if(this instanceof arguments.callee){
this.init.apply( this, args.callee ? args : arguments );
} else {
return new arguments.callee(arguments);
}
}

2008年8月23日土曜日

Adobe Flex 3リファレンスガイド の関連項目のリンク先についてメモ

たとえばこのページの関連項目のリンク先は以下だけれども、開いてみると404 になる。

http://livedocs.adobe.com/flex/3_jp/about_dataproviders_1.html

で、最初はどうでもよかったんだけど、どうしたら見れるんだ!?と悩んだ結果以下のようにすると見れることが分かった


http://livedocs.adobe.com/flex/3_jp/html/help.html?content=about_dataproviders_1.html


以下のURLだと上のURLにリダイレクトされるので、こちらでもOK
http://livedocs.adobe.com/flex/3_jp/html/about_dataproviders_1.html


adobe に修正のお願いをしようと思ったけど、メールアドレスが見つからないので挫折した。
さすがに ドメインの登録アドレスに送るのなぁ・・・

2008年8月5日火曜日

Eclipse で mxml の コード補完

EclipseでFlex (でぃべろっぱーず・さいど) を参考にさせてもらってFLEX3でswfの作成はできたけれども自動補完に慣れてしまっている所為か思うようにmxmlを書けず1月ほど悩んだ末にやっと、自動補完をできたのでメモ

自動補完をするには、WTP?WST?が必要。もしかしたらほかのxmlエディタでもできるかも

まず、最初に以下のサイトから flex3.xsd をダウンロード
http://code.google.com/p/xsd4mxml/



ダウンロードしたファイルを適当なところに保存して、
Preferences → Web and XML → XML Catalog で追加



General → Content Types 内の XML を選択肢、*.mxmlを追加

以上で、終了。
General → Editors → File Associations にも *.mxml を追加したけど
必要なのかは不明


これで、mxmlファイルを開くと 色はついてるし、ctrl + Spaceで補完候補はでるし
やりやすくなった。


とはいえ、HTMLと違ってよく分からないので絞り込めず候補が多すぎてすぐには使えない・・・

まずはリファレンスをしっかり読むか・・・