日記帳

日記です。

ECMAScript

swt と JavaScript で Web ブラウザ

swt が使えるなら org.eclipse.swt.browser.Browser クラスが使えるわけで Web ブラウザくらい書けるはず. % cat Browser.js importPackage(Packages.java.lang) importPackage(Packages.org.eclipse.swt) importPackage(Packages.org.eclipse.swt.browser)…

JavaScript で swt 3.3 を使ってみる

gcj から使えるなら rhino からも使えるのはずです. % cat HelloSWT.jsimportPackage(Packages.org.eclipse.swt.widgets) importPackage(Packages.org.eclipse.swt.layout) importPackage(Packages.org.eclipse.swt) var display = new Display(); var shel…

Rhino 1.6R7 を MinGW の gcj でコンパイル

mozilla.org による Java で書かれた JavaScript の処理系である Rhino 1.6R7 を MinGW の gcj でコンパイルして Windows 用のバイナリを作ってみました. http://cefiro.homelinux.org/memo/2007-10-03/ - コンパイル手順 http://cefiro.homelinux.org/memo…

Rhino 1.6R7 を gcj でコンパイル

Rhino 1.6R7 を gcj でコンパイルしてみました. http://cefiro.homelinux.org/memo/2007-10-02/ Rhino 1.6R6 でいろいろと機能追加があったようです.R7はバグフィックスのみ. http://developer.mozilla.org/en/docs/New_in_Rhino_1.6R6 1.6R6での主な変更…

wikifiled

Yahoo UI Library*1 の勉強ついでに WikiParser.js *2を使ったなにかを HTA *3として作ってみよう企画.当然実用性はないです…とりあえず弄るのに飽きたから公開. http://cefiro.homelinux.org/memo/2006-06-01/wikifiled-0.0.1.zip - ファイル http://cefi…

WikiParser.js について

なんか http://d.hatena.ne.jp/sa-y/20060509 がたくさん参照されてるみたいですがみんなこういうのが好きなんでしょうか?ちょっと探してみると同じようにWikiライクなテキストのパーザは他にもあるみたいです. http://dev.ishinao.net/WikiParser/javascr…

WikiParser.js

ECMAScript で Wiki っぽいテキストをパーズして HTML DOM ツリーにするパーザです. http://cefiro.homelinux.org/memo/2006-05-10/WikiParser.js ソース http://cefiro.homelinux.org/memo/2006-05-10/test_wiki_parser.html デモ 久しぶりに使ったのでち…

TestSprite.js (2)

http://d.hatena.ne.jp/sa-y/20060425#1145974636 で書いた TestSprite.js は不当に(?)遅い物だったと気が付いたのでもう少し最適化してみました。別に testsprite.booが C の 55% も出るらしいのに Rhino の ECMAScript で 30% 程度の性能しか出なかったの…

Date_format.js

ECMAScript の Date オブジェクトに strftime(3) っぽいメソッドを追加するスクリプトです.すっっごく昔に作った物ですが,それを久しぶりに使ったのでちょっと整理. http://cefiro.homelinux.org/memo/2006-04-27/

TestSprite.js

Rhino では JavaScript から任意の Java オブジェクトが扱えます. gcj でコンパイルしてあるので sdl4gcj を使えば当然 SDL も扱えるわけです.新しくバインディングを書かなくても SDL が使える言語が増えるのって楽でいいですねぇ♪ってことで SDL の test…

Rhino 1.6R2 を gcj でコンパイル

Rhino 1.6R2 を gcj でコンパイルできるようにしてみました. http://cefiro.homelinux.org/memo/2006-04-25/ JRE で実行すると起動が遅くてやる気がなくなる Rhino ですが gcj でネイティブコードにコンパイルしてしまえば快適に動きます.

委譲(2)

委譲*1の続き.少しだけ変更してみました. Object.prototype.delegator = function(accessor, methodName, aliasName) { if(!aliasName) aliasName = methodName; if (typeof accessor == "string") { this[aliasName] = function(){ this[accessor][method…

委譲

ECMAScript のプロトタイプチェインでの継承は基本的に単一継承なので割とよく委譲を使うことになると思います.もちろんプロトタイプチェインによる継承それ自体も委譲なわけですけど…委譲といえば Ruby の Forwardable.rb*1 が便利なのでとりあえず ECMASc…

Web ブラウザでの Global オブジェクト

Global オブジェクトがどんなオブジェクトになるのかは処理系依存のようですが Web ブラウザ上で JavaScript を実行する場合の Global オブジェクトは Window オブジェクトらしいです. alert(this === window); // => true alert(this.window === this); //…

ECMAScript の Global オブジェクト

Global オブジェクトと this について以下のサイトが参考になりました. http://malt.seesaa.net/article/7429410.html 以下メモ書き.要約すると Global オブジェクトが現われるのは以下の場合のようです. Global スコープの this 関数を関数形式(メソッド…

アクセサメソッド定義メソッド(3)

http://d.hatena.ne.jp/sa-y/20060320#1142855348 の続きです.attr_reader() でデフォルト値を指定できるようにしてみます. Object.prototype.attr = function(name, initialValue) { this.attr_reader(name, initialValue); this.attr_writer(name); } Ob…

アクセサメソッド定義メソッド(2)

attr() *1 でアクセサメソッドを定義してもプロパティを直接読み書きできてしまします. Object.prototype.attr_reader = function(name) { var capitalizedName = name.charAt(0).toUpperCase() + name.substring(1) var readerName = "get" + capitalizedN…

private なプロパティ

ECMAScript 3rd Edition では private なプロパティを実現するために以下のようなコードが書けます。 function Value() { var value = 0; this.getValue = function() { return value; } this.setValue = function(newValue) { value = newValue; } } var ob…

アクセッサメソッド定義メソッド

ECMAScript ではメソッドの呼出しとプロパティの参照は透過的ではありません. account.message() // メソッドの呼出し account.message // プロパティの参照多態したい場合にはメソッド呼出しに統一するしかないので単純なプロパティへのアクセスもアクセサ…

BankAccount

人はなぜ BankAccount を書くのでしょうか?知らんけど. ってことで ECMAScript 3rd Edition での BankAccount サンプルです. ブラウザ向けなので alert() を使ってますがそれ以外の環境なら別の出力関数を使いましょう.rhino*1 や SEE*2 なら print(),W…

関数定義についての誤解

誤解というか不理解というか.今までずっと, function func(){}は, func = function (){}のシンタックスシュガーだと思っていました. 前者は関数宣言であり,後者は関数式らしい.この2つには以下違いがあるようです. 記述できる場所 初期化のタイミング…

オブジェクトのクローン

オブジェクトのクローンを作成するメソッドを考えてみる.オブジェクトのクローンっていってもクラスベースOOPLによくある shallow copy を生成するメソッドではなくてプロトタイプベース言語らしく自分自身をプロトタイプオブジェクトとして持つ新しいオブ…

プログラミング言語 JavaScript

最近 JavaScript ばかりいじっています。Web アプリケーションを書く様になってから使うようになって、さらに XUL アプリケーションやら WSH やらでもう6,7年は使っています。付き合いの長い言語なのですが JavaScript の言語自体の詳細についてあまり理解し…