日記帳

日記です。

2006-03-01から1ヶ月間の記事一覧

委譲(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 関数を関数形式(メソッド…

Ruby で C がスパゲッティ

戯れに注文したスパゲッティが本当に出来てきました… http://d.hatena.ne.jp/shinichiro_h/20060323#1143054071 これが本場イタリア仕込みのスパゲッティらしいですよ!全然 SDL じゃないけどとりあえず気にしない方向で… main 関数だけに展開 変数名は全部1…

アクセサメソッド定義メソッド(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 の言語自体の詳細についてあまり理解し…