JavaScript

java.lang.StringとString.prototypeの関係

命名規則でクラスについては大文字それ以下は小文字というルールを決めているのでPHPとかでいうucfirst関数を書いているのですが型がJavaのjava.lang.StringだとcharAtを利用するとうまく行かないという話。jrunscriptで検証。 String.prototype.ucfirst = f…

文字列連結を素早くするオブジェクト

JavaScriptの文字列連結はすればするほど長くなればなるほど重くなるっていうのは有名な話でどうしても何回も連結せざるを得ない状況(テンプレート処理)では以下のような俺オブジェクトを使って対処してきました。 ただ人間欲が出てくると replace したいと…

JavaScript継承パターンまとめ

プロトタイプ function Animal(){}; Animal.prototype = { sleep : function(){}, walk : function(){ alert('noshi, noshi') } }; function Human(){}; Human.prototype = new Animal(); new Human().walk(); // noshi, noshi もっともポピュラだと思われる…

function hoge.hoge(){ alert('orz...') }

IE専用です。というかこんなんありか!!!wIE(6)では以下の構文もうまくいきます。もちろん,hoge.hogeだったら先に hogeを定義しておこないとうまく行かないです。変なの。 function hoge(){ alert("hoge"); } function hoge.hoge(){ alert("hoge.hoge"); } h…

不思議の国の言語

この前、本屋に立ち読みしていたんですが、その本にECMAScriptのフリガナが【エクマスクリプト】ってうってあってそうだったんだ!と感銘を受けました。イーシーエムエーかと思っていました。 JavaScriptと他の言語(まぁ全ての言語とか比較したわけではない…

Template Engine on JRunScript

JRunScriptでJSmartyする JSmartyとかはDOMなどを利用していないのでDOMがないような環境つまりスパイダーモンキーとかライノーとかでも動くようにすることができます。JSmarty/internals配下にあるsystem.***.jsが各環境用の定義ファイルとなっていてそれを…

文字列連結の動作速度の検証

Java6ではJavaScriptを利用できるのは言うまでもないのですがファイルを読込む場合にはjava.langのStringBuilderを利用したら早いか、+=の連結がいいか。自前でつくったほうがいいかの検証。 var text = ''; var buf, BufferedReader = java.io.BufferedRead…

ECMAScriptはJIS規格でもあったのか〜〜〜〜!!!!

まぁそういうことです。リンクについてはなんかサイトポリシーを見たら申告制らしい。原則としてトップページのみいやはや...。ttp://www.jsa.or.jp/ 規格番号:JIS X 3060:2000 標題:ECMAScript言語 英訳標題:Information technology -- ECMASc…

Java6でJavaScriptを試した

Java6が正式リリースされたので早速JavaScriptを試してみました。JRunScriptではなくjavax.script.*の検証です。とりあえずHello World!!から... Hello World!!(Main.java) import javax.script.*; class Main { static ScriptEngine engine = new ScriptEng…

innerHTMLでdocument.writeする - その2

XMLHttpRequestで取得したHTMLをそのままinnerHTMLに挿入してそこにあるscriptもついでに実行したい場合には役に立つはずです。 って自分で書いていて実際にinnerHTMLにscriptを挿入して動かないっていうサンプルを公開していたのでそれを正常に動くようにし…

innerHTMLでdocument.writeする - その1

前回のエントリの続きです。defer属性指定しただけではdocument.writeしたときに順番が狂う。foo bar fooなら foo foo barと表示される。ノードツリーが完成した後にdocument.writeすると大変なことになるしなかなか利用しづらい面もあって、以下のようなコ…

innerHTMLでscriptする

innerHTMLにscriptを代入しても評価されず無視されるのはIEの仕様なのでいいとしてその回避策。最近、昔あの方法で出来たんだけどいつの間にかできなくなってるコードが出てきている気がします(気のせいにしておこう)。 以下は一般的な動かないコード。 <div id="foo"></div> <script type="text/javascript"> do</script>…

HTMLのタグ属性文字列をJSON文字列化

例えば 以下の文字列を foo="fooText" bar="barText" attr="attr's text" 以下のJSON文字列にしたい {foo:"fooText",bar="barText",attr:'attr\'s text'} 昔は正規表現を利用していた。 正規表現を利用してループ処理して色々やってJSON文字列を作成していま…

PHPの関数をJavaScriptに移植していた件

id:shogo4405:20061029:1162103214 id:shogo4405:20061022:1161518840 もともとJSmartyのプラグインで実装する必要があったのでPHP関数をJavaScriptに移植していました。JSmarty以外でも僕は利用することがあってJSmartyで利用しないものも移植していました…

文字列を1つ1つの文字の配列にする

'foo'を['f','o','o']にする際に以下のコードがどちらが早いか試行したのでメモ。T01は正規表現を使って分割して配列にした。T02はcharAtで一つ一つ取り出して配列にした。 実験コード function T01(s){ return s.split(/(.|\r?\n){0}/); }; function T02(s)…

script要素のtextプロパティ

http://d.hatena.ne.jp/brazil/20061105/1162722198 http://rails.office.drecom.jp/takiuchi/archive/100 の中で記述されているscript要素にinnerHTML突っ込んでもうまく作動しない件。僕のIE6でもできないのでMSの月例更新で仕様変更になったのかと勝手に…

クラスベースとプロトタイプベース

id:shogo4405:20060809:1155103019でJScriptで書いてコンパイルした実行ファイルは外部.jsファイルを読込んだ後にevalが出来るということを思い出して実験的にJSmartyのFileオブジェクトとPluginオブジェクトをJScript.NETに移植しようと試みた。 結果として…

Objectをソートしたい

以下のコードを a,bar,foo,z順で中身を取り出したい。 o = { foo:'foo', a:'0', z:'1', bar:'0' } こんなコードで… まぁ一応 0, 0, foo, 1と列挙される。 a = []; for(i in o) a.push(i); a.sort(); // 配列のソート関数 for(i=0;i

Function#toString()とswitch構文

switchをつかった以下のようなコード 以下の現象ははFirefox(1.5.0.7)で確認しました(2では問題無)。Function#toString()は信じると痛い目にあうという話。switch構文は以下のようにかける(PHPでもOK!)*1 function foo() { switch(true) { case (typeof(a) !…

Firefoxクラッシュ

Firefox1.5.0.7なんですが…以下のJavaScriptでFirefoxがいってしまいます。なんか、むか〜しIE(id:shogo4405:20060903:1157257268)でも同じことありましたね(--;。いやはや。僕だけかな(?-?) Firefox2.0では正常にfalseを返してくれます。 location instance…

デバッグのおともにvar_dump

JavaScriptでデバックしようとおもったら for(i in object){ document.write(i,'=>'object[i]) }; とかやってオブジェクトの中身をみたりFirebugをつかったりと色々です。 毎回、毎回 for(i in object)〜やるのは正直めんどくさいということで関数一発ででき…

JavaScriptでPHPの関数を実装する

JavaScriptでPHPとかの関数あったらいいなと思うときがあってJSmartyで必要になったので書きました。PHPと同名の関数のJavaScript版です。バグとかあるのは承知の上でまだ完璧に実装終っていませんが置いておきます。ご自由にどうぞ。(増えるかも) ダウンロ…

Dateオブジェクトの返す文字

今、PHPのstrftime関数*1をJavaScriptに移植しています。その為にDateオブジェクトで返される数字の範囲確認したので以下はそのまとめです。2006/10/22に調査実施しました。getYearは実装違うのgetFullYear利用したほうが無難。 IE6 Firefox Opera 備考 getF…

JSONPの動作原理

やっと最近JSONPの動作原理を理解した。超頭悪い…。動作原理の私的メモ。JSONPって1と2の組合せの応用。いったい僕は何を勘違いしたのか…。 1.JavaScript関係の処理系は以下のような感じ もっともJSONPでは動的にDOM処理で<script>タグを生成するテクを利用している…

Iteratorパターン

下記例ではIteratorの実装を変更するだけで利用例を変更することなく列挙する順番を変更することが可能です。 サンプル 利用例 var i = new Iterator(['foo0','bar0','foo1','bar1']); while(i.hasNext()){ document.write(i.next()); }; 実装例#01 foo0, ba…

JavaScriptのオブジェクト指向入門

ちょっと色々なサイトで取り上げられているので二番煎じですがまとめておく必要がでてきたのでポストします。 JavaScript言語概要 JavaScript は 手続き型 (procedural) 言語と オブジェクト指向 (object oriented) 言語の両方として機能させられる。 オブジ…

TrimSpreadSheet調べ

アブストラクト TrimSpreadSheetはオープンソースなスプレッドシートエンジンである。記法はHTMLTableを利用し100% JavaScriptとCSSで記述されている。ライセンスはGPL2.0である。

TrimBreakPoint調べ

アブストラクト TrimBreakPointはJavaScriptのデバッグユーティリティである。TrimBreakPointで設定したブレークポイントに存在するスコープの変数の参照や変数の代入などが可能である。

DOMの見慣れないメソッドHTMLElement.insertAdjacent〜

Faster DHTML in 12 Steps (MSDN) DHTMLの12の高速化テクのページの以下のようなコードのinsertAdjacentElementメソッド。(←DOM操作の高速化テク乗っているのでお勧めです。) SPANノードの直後に100個のSPANを追加するコード*1 var node; for (var i=0; i<10…

JavaScriptオブジェクト思考*1#01

prototypeを用いたクラスの作成と継承 クラス作成 Super = function(){}; Super.prototype = { prop1 : "prop1", prop2 : "prop2" }; クラスの継承 Basic = function(){}; Basic.prototype = new Super; Basic.prototype.method1 = function(){}; Basic.prot…