トップ «前の日記(2005-04-02) 最新 次の日記(2005-04-04)» 編集

いしなお!

2002|01|02|03|04|05|06|07|08|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|02|03|04|07|
2009|03|

2005-04-03 [長年日記]

_ [日常] 花見 (00:14)

昨日は会社の花見だったんだけど、ここのところ花粉症がひどいし、いつもの渋谷近辺ではなく上野会場ってことでいまいち土地勘もないし、面倒くさいなーと思いつつも、終わる時間頃を狙ってちょっとだけ顔を出しに行った。けど、場所取り予定地近辺にそれらしい集団は見つからず。携帯に電話してまで合流すると二次会に連れて行かれそうな気がしたんで、上野公園内を散歩して偶然であったら合流しようと思いつつ1時間ほどうろうろしたけど、結局出会えず。まあいいかってことでそのまま帰ってきた。ちなみに桜は1割くらいが咲いている感じ。一分咲きとかではなく、1割の木がほぼ満開になっている、って感じね。

_ [JavaScript] JavaScriptでpreg_replace_callback 2 (11:14)

JavaScriptでpreg_replace_callback』の続き。replaceの第2引数で関数が呼べることがわかったんで、それならオブジェクトのメソッドも呼べるだろうと、以下のように書いてみた。

function Test()
{
	this.prop = 1;
}

function Test_replace()
{
	var str = 'abcde';
	var result = str.replace(/bcd/, this.callback);
	return result;
}
Test.prototype.replace = Test_replace;

function Test_callback()
{
	return this.prop;
}
Test.prototype.callback = Test_callback;

test = new Test();
alert(test.replace());

確かにthis.callbackという表現でcallbackが呼べる。けど、実際にはthis.callbackが呼ばれているのではなく、単にTest_callbackが呼ばれているっぽい。

this.callback内で参照しているthisが、呼び出し元のthisじゃなく、windowオブジェクトになっちゃっている(Test_callbackの中身を「return this.location.href;」とかするとそのように動く)。だからthis.propで1に置換されることを期待しても、callback内ではthis.propが見つからず(未定義)、上記の結果はIEなら「ae」、Firefoxなら「aundefinede」になっちゃう。

うーん、replaceのコールバック関数として、オブジェクトのメソッドを呼ぶ方法はないのかなー。WikiParserを移植するに当たっては、オブジェクトのプロパティ(パーサーオブジェクトごとに固有の設定値)を参照したいんだけどなー。グローバル変数領域をそれなりに汚染しつつパラメータを受け渡すしかないのかなー。

ところでJavaScriptでの文字コード変換って、『Escape Codec Library: ecl.js』のライブラリを使わせてもらうってのが、現時点では一番妥当な選択なのかなー。 

_ [blogmap][MT] 『movable typeでRSS 1.0にcontent:encodedを含める方法』に追記しました(T/O) (12:50)

_ [mapserver] MapServerをひとまずインストールだけしてみた (13:54)

実際に入れたのは、ちょっと古い国際化バージョンの方だけど。

具体的な使い方はさっぱりわからんけど、一応表示できているっぽいな。これであとは「GISデータパック」(全国一括98,000円:1サーバーライセンス)ってのを買えばいいのか。うーん、思ったよりお手軽っぽい。迷うなー。

_ [WikiParser][JavaScript] WikiParserのJavaScript移植版 (18:50)

基本文法部分はほとんどそのまま移植しているんで、PHP版のWikiParserをサーバーサイドで使っている場合のクライアントサイドのプレビュー用に使ったりすると、再現性が高くていいかもしれない。tDiaryのWikiスタイルとの互換性も結構高いはずだから、tDiary Wikiスタイルのクライアントサイドプレビュー用にも使えるかな。

端折っているのは、プラグイン周りとInterWiki。InterWikiについては、文字コード変換処理をどうするか迷って、結局載せていない。これはまあ方針さえ決まれば載せられる。プラグインも載せるのは簡単そうだけど、JavaScriptでプラグインを書く人はいないような気がしてきたんで、いらないかなーと思いつつある。

というわけで、初めてJavaScriptで見た目の動きをいじったりする以外のコードを書いてみたけど、結構ちゃんと書けるね。

本日のツッコミ(全2件) [ツッコミを入れる]
_ nazoking (2005-04-03 22:22)

>JavaScriptでpreg_replace_callback 2<br>メソッドを呼ぶ方法は分からなかったんですが、こんなんじゃだめですかね?<br><br>function Test_replace(){<br> var str = 'abcde';<br> var thisobj=this;<br> var result = str.replace(/bcd/, function(){ return thisobj.callback(); } );<br> return result;<br>}<br>関数内の変数領域は汚しますがグローバルは汚しません。<br>「Javascript クロージャ スコープ」辺りでぐぐってみるといくつか解説が出てきます

_ ishinao (2005-04-04 01:14)

なるほど、クロージャのスコープを利用して、無理矢理メソッドを呼んじゃうわけですか。というか、JavaScriptのスコープってそうなっていたのか。<br><br>確かにその方法でいけそうです。どうもありがとうございました。

[]