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

Arrayクラスに対する拡張

【抜粋】一部省略 Object.extend(Array.prototype, Enumerable); Array.prototype._reverse = Array.prototype.reverse; Object.extend(Array.prototype, { _each: function(iterator) { for (var i = 0; i < this.length; i++) iterator(this[i]); }, (省略…

$A関数

【抜粋】 var $A = Array.from = function(iterable) { if (!iterable) return []; if (iterable.toArray) { return iterable.toArray(); } else { var results = []; for (var i = 0; i < iterable.length; i++) results.push(iterable[i]); return results…

Enumerableクラス(5)

以下はそれぞれ、メソッドの別名を定義しています。Enumerableオブジェクトにmap, find, select, member, entriesメソッドを持つ無名オブジェクトを継承させています。 【抜粋】 Object.extend(Enumerable, { map: Enumerable.collect, find: Enumerable.det…

Enumerableクラス(4)

zipメソッド 【抜粋】 zip: function() { var iterator = Prototype.K, args = $A(arguments); if (typeof args.last() == 'function') iterator = args.pop(); var collections = [this].concat(args).map($A); return this.map(function(value, index) { i…

Enumerableクラス(3)

injectメソッド 【抜粋】 inject: function(memo, iterator) { this.each(function(value, index) { memo = iterator(memo, value, index); }); return memo; },第一引数memoを初期値として、iteratorによりmemoを変更していき、最終的にこれを返却していま…

Enumerableクラス(2)

allメソッド 【抜粋】 all: function(iterator) { var result = true; this.each(function(value, index) { result = result && !!(iterator || Prototype.K)(value, index); if (!result) throw $break; }); return result; },前述eachメソッドを、無名内部…

Enumerableクラス(1)

prototype.js解読の山場のひとつです。 【抜粋 一部省略】 var Enumerable = { each: function(iterator) { var index = 0; try { this._each(function(value) { try { iterator(value, index++); } catch (e) { if (e != $continue) throw e; } }); } catch…

$breakeオブジェクト、$continueオブジェクト

【抜粋】 var $break = new Object(); var $continue = new Object();次のEnumerableクラスでエラーオブジェクトとして使用します。

Stringクラスに対する拡張(3)

toQueryParamsメソッド 【抜粋】 toQueryParams: function() { var pairs = this.match(/^\??(.*)$/)[1].split('&'); return pairs.inject({}, function(params, pairString) { var pair = pairString.split('='); params[pair[0]] = pair[1]; return params…

Stringクラスに対する拡張(2)

evalScriptsメソッド 【抜粋】 evalScripts: function() { return this.extractScripts().map(eval); },文字列(this)から、前述extractScriptsメソッドで取得したscriptコードすべてを、eval関数で実行しています。要素のinnerHTMLプロパティへソースを設定…

Stringクラスに対する拡張(1)

【抜粋】一部省略 Object.extend(String.prototype, { stripTags: function() { return this.replace(/<\/?[^>]+>/gi, ''); }, (省略) inspect: function() { return "'" + this.replace('\\', '\\\\').replace("'", '\\\'') + "'"; } });既存Stringクラスに…

$関数

【抜粋】 function $() { var elements = new Array(); for (var i = 0; i < arguments.length; i++) { var element = arguments[i]; if (typeof element == 'string') element = document.getElementById(element); if (arguments.length == 1) return elem…

PeriodicalExecuterクラス

【抜粋】 var PeriodicalExecuter = Class.create(); PeriodicalExecuter.prototype = { initialize: function(callback, frequency) { this.callback = callback; this.frequency = frequency; this.currentlyExecuting = false; this.registerCallback(); …

Try.theseメソッド

【抜粋】 var Try = { these: function() { var returnValue; for (var i = 0; i < arguments.length; i++) { var lambda = arguments[i]; try { returnValue = lambda(); break; } catch (e) {} } return returnValue; } }Tryオブジェクトにtheseメソッドが…

Numberクラスに対する拡張

【抜粋】 Object.extend(Number.prototype, { toColorPart: function() { var digits = this.toString(16); if (this < 16) return '0' + digits; return digits; }, succ: function() { return this + 1; }, times: function(iterator) { $R(0, this, true)…

Functionクラスに対する拡張(2)

bindAsEventListenerメソッド 【抜粋】 Function.prototype.bindAsEventListener = function(object) { var __method = this; return function(event) { return __method.call(object, event || window.event); } }構造は前述bindメソッドと似ています。call…

Functionクラスに対する拡張(1)

既存のFunctionクラスにメソッドを二つ追加しています。prototypeプロパティへの追加なので、インスタンスであるすべての関数で使用可能となります。 bindメソッド 【抜粋】 Function.prototype.bind = function() { var __method = this, args = $A(argumen…

Ver1.041がVectorで公開されました。

管理者のサイトでのVer1.041公開は停止します。今後はVectorからのダウンロードをお願いいたします。

Objectクラスに対する拡張

既存のObjectクラスにメソッドを2つ追加しています。 extendメソッド 【抜粋】 Object.extend = function(destination, source) { for (property in source) { destination[property] = source[property]; } return destination; }第二引数のオブジェクトの…

Abstractオブジェクト

【抜粋】 var Abstract = new Object();ここではオブジェクトを作成しているだけ。後で使います。

参考サイト

すでに同じようなことをされているサイトはあるだろうなぁとは思いつつ、書き始めてしまったprototype.js解読ですが、やはりありました^^; Hawk's Laboratory:prototype.js 1.4.0を読む Hawk's Laboratory:prototype.jsカテゴリ とても詳しく、参考にな…

Classオブジェクト

【抜粋】 var Class = { create: function() { return function() { this.initialize.apply(this, arguments); } } } 構造解析 createメソッドは、自オブジェクトのinitializeメソッドを呼び出す無名関数を返却します。つまり、以下の2つは同じ意味です。 …

Prototypeオブジェクト

【抜粋】 var Prototype = { Version: '1.4.0', ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)', emptyFunction: function() {}, K: function(x) {return x} }これ自体の機能はたいしたことありませんが、見慣れないと何をやっているのか分かりにくいで</script.*?>…

初級者によるprototype.js解読

はじめに 「初級者による」であって「初級者のための」でなく、「解読」であって「解説」ではありません^^;prototype.jsを使ってみようと思ったのですが、中で何をやっているかは知っておきたいというのと、今後の参考になるかと思い、ここ数日で解読して…

IEのImage.src.width(height)の値はどこから来るのか?

theater.js作成開始当初から、不思議に思っていることがあります。IEのImageオブジェクトの振る舞いについてです。theater.jsは、画像を画像ボックスに合わせて縮小して表示するため、画像の幅・高さをImage.src.width(height)で取得しています。これを元に…

Scripting.FileSystemObjectが使えない?

WSH

theater.jsの動作確認をしようと、先ほど管理者のサイトからダウンロードし、シナリオファイル編集ツール(writer.htm)を開いてみたら、左下に「ページでエラーが発生しました」@@;「またバグかぁ?!」と慌てて確認したところ、どうやらScripting.FileSys…