2009-09-01から1ヶ月間の記事一覧

/^[a-z]+(\d+)/("abc123") という書き方が許容されているみたい(IE除く)

js

Safari, Chrome, Firefox, Opera では、 /^[a-z]+(\d+)/("abc123")とすると、 /^[a-z]+(\d+)/.exec("abc123")相当の動作をするようです。 IE だと「関数が見つからない」とエラーになります。寝ぼけながら書いたコードが IE 以外だとまともに動いちゃったり…

カプセル化 + メッセージハンドラ としてクラスを使う

js

クラスには、継承とカプセル化の役割があります。 JavaScript は、クラスベースの継承をサポートしませんが、カプセル化は JavaScript でも自然に扱えます。 # 継承は委譲などで代用できますし、ダックタイピングという手もあります。以下は、 [1] クラス A1…

IE6 はノードに追加したオレオレプロパティが消せない(delete document.body.hoge が出来ない)

オレオレ要素が消せない → オレオレプロパティが消せない 余談だけどそれは「属性(アトリビュート)」またはJS的に「プロパティ」と呼ぶものだと思う。「要素」だとHTML要素のことだと思ってしまう。 by Yuichirou たしかに。 Yuichirou さん ありがとう! …

もうちょっと説明すると

js

<html><head><title></title> <script src="uu.js"></script> <script src="uu.ev.js"></script> <script src="uu.css.js"></script> <style> div { background-color: red; } .mark { background-color: lime; } </style><script> function boot(uu, $) { uu.exp(); mix(win, { TOP: 1, LIST: 2 }); body(h…</head></html>

たとえば

js

こういう(↓) HTML を、 JavaScript で簡潔に表現できたり [199 byte] <body> <h1>-DEMO-</h1> <div id="a" class="mark">node1</div> <div id="b" class="mark">node2</div> <div id="c" class="mark"> <ul> <li>node3-1-1</li> <li>node3-1-2</li> <li>node3-1-3</li> </ul> node3 </div> </body>[191 byte] body(h1(tx("-DEMO-")), div("i…

arguments と Function.apply(this) を上手に扱う

js

追記: apply("add string") で何が渡ってるのか見てみました。 Chrome以外のブラウザは new String("add string") が渡されてました function func1(var_args) { func2.apply("add string", arguments); // this に "add string" そのものを渡す } function …

もっと速くするために(文字列変換コストの抑止 + String.prototype 化による影響)

element.style.xxx にアクセスするには、"css-prop" ではなく "cssProp" の形でアクセスする必要があります。このとき行われる変換は camelize と呼ばれ、JavaScriptライブラリの多くは以下のような実装を行っているようです。 # camelize = らくだのこぶの…

もっと速くするために(Array.forEach は控えめに)

追記 「forEach より for のほうが速いよ」って書くときに、一言「でも forEach を使わないとハマるコードもあるよ」と付け加えておいたほうがいいんでないの forとforEach - JavaScriptで遊ぶよ - g:javascript ごめんなさい、いつも端折ってます。…と。そ…

もっと速くするために(トップレベルオブジェクトの省略)

昨日の続きです。ブラウザで動作する JavaScript では、トップレベルオブジェクト(window)を省略できます。これにより、window.setTimeout や window.document と書くかわりに setTimeout や document と書いても動作します。今日は、省略すると速くなるのか…

もっと速くするために(スコープ解決コストと正規表現オブジェクトの置き場所)

正規表現オブジェクトをどのように配置すれば効率的なのか調べました。 配置パターン A. ループ内にべた書き function job(expr, n) { var i = 0, match; for (var i = 0; i < n; ++i) { match = /regexp1/.exec(expr); match = /regexp2/.exec(expr); } } B…

Opera10が出たので、Opera9.2x のサポートを止めます。

js

uuAltCSS.js, uuCanvas.js, uuQuery.js でサポートするブラウザを変更します。 IE6 〜 IE8 IE6の後方互換モードはサポートしません。 Opera9.5x 〜 Opera10.0 Opera9.2x は今後サポートしません。 Firefox2.0 〜 Firefox3.5 Safari3.1 〜 Safari4.0 Safari3.…