GLOSSARY - 用語集

Pollution - Global name space pollution, Prototype object pollution - グローバルネームスペース汚染, prototype汚染

JavaScript は最初から存在するオブジェクト(ビルトインオブジェクト)の拡張が可能です。

// Numberオブジェクトを拡張し「奇数ならtrueを返す」メソッドを追加する
Number.prototype.odd = function() {
  return !!(this.valueOf() % 2);
}

これは JavaScript の魅力の1つであり OOP 的な観点からも有益に見えるものですが、これには落とし穴があります。
安易な拡張を繰り返すと ライブラリ併用時の衝突や、 Array + for in ループで拡張された(意図しない)プロパティが列挙され、ループ処理が使えなくなる等の副作用が露呈するのです。

やりすぎた拡張は「プロトタイプ汚染」と呼ばれます。JavaScript という言語が持つ優れた拡張性は、汚染とのトレードオフなのです。

ブラウザ上で動作する JavaScript では、トップレベルオブジェクト(window オブジェクト)が常に存在します。
トップレベルオブジェクトはどこからでもアクセス可能なネームスペース(スコープ)に属す特別なオブジェクトです。
window オブジェクトに何かを追加するということは、グローバル関数やグローバル変数を追加したことになります。

// ブラウザ上で動作する JavaScript では
// var hoge = 1; は、window.hoge = 1; と同じ
<script>
var hoge = 1;
alert(hoge === window.hoge); // true
</script>

コンセプトの異なる複数のライブラリを組み合わせた場合に、トップレベルオブジェクト以下の名前空間(グローバルネームスペース)が汚染され、ライブラリの衝突が発生するケースがあります。
特に、window.$ や window.$$ などは、多くのライブラリが似て非なる実装を行っているため、簡単に衝突します。

以下が uupaa.js によるグローバルネームスペースの拡張リストです。
ライブラリ併用による衝突が発生しないように配慮してあります。

window(Global Object)

uu で始まるキーワードは uupaa.js が使用します。

  • window.uu - uupaa.js 用ネームスペース
  • window.uuClass - クラス用ネームスペース
  • window.uuConst - 定数格納用ネームスペース
  • window.uuConfig - 設定格納用ネームスペース
Array.prototype

ECMA-262の仕様を非モダンブラウザでも使用可能にします。

String.prototype

多用される機能を取り込みます。

Math.prototype

多用される機能を取り込みます。

  • Math.toDegrees - (Java.Math 由来の拡張)
  • Math.toRadians - (Java.Math 由来の拡張)
HTMLElement.prototype

多用される機能を取り込みます。

  • HTMLElement.prototype.outerHTML - Firefox2+ で outerHTML を使用可能にする - (IE 由来の拡張)
  • HTMLElement.prototype.innerText - Firefox2+ で innerText を使用可能にする - (IE 由来の拡張)
Selector - セレクタ

ある要素の色やテキストを変更しようとした場合に、まずその要素を特定する必要があります。
セレクタとは、ドキュメントツリーに存在する多数の要素から、ある特徴を元に絞り込みを行う一連の関数群のことです。
uupaa.js は、多様なセレクタを提供しています。

SyntaxSugar - シンタックスシュガー

シンタックスシュガーとは、苦く飲みづらい薬を糖衣(砂糖でまぶ)した状態のことです。
プログラミングの世界では、構文を簡単に扱えるように形を多少変化させたものを意味します。

var hash = { a: 0 }; とあった場合に、「hash の a にアクセスする」には、2種類の構文が使えます。

JavaScript の本質的な構文は スクエアシンタックス で、ドットシンタックス はその シンタックスシュガーです。
ドットシンタックスは記号や数値で始まるプロパティにアクセスできないという制限もあります。

hash["(; _ ;)"] は構文的に正しく、hash.(; _ ;) はエラーになります。

Element - 要素
配列の個々の値を、配列の要素(Element)と呼びます。
また、ドキュメントツリーに参加している個々の要素のことも Element と呼びます。
ドキュメントツリー上の要素にアクセスするには Selector を使います。
Attribute - 属性

<div id="sample" class="dummy"></div> といった HTML の断片があった場合に、
id 属性の値は "sample" で、class 属性の値は "dummy" です。

div 要素の style 属性の値を全て列挙するには次のようにします。

uu.css("div[style]").forEach(function(v) {
  alert(v.style);
});
NodeType - ノードタイプ

DOMノードにはいくつか種類があり、これを NodeType と呼びます。

NodeTypeValue説明
ELEMENT_NODE1HTML を構成する要素(タグ)です。
ATTRIBUTE_NODE2DOM Attribute ノードです。
TEXT_NODE3テキストノードです。
CDATA_SECTION_NODE4CDATA セクションノードです。
ENTITY_REFERENCE_NODE5
ENTITY_NODE6
PROCESSING_INSTRUCTION_NODE7
COMMENT_NODE8コメントノードです。
DOCUMENT_NODE9document ノード(ルートノード)です。
DOCUMENT_TYPE_NODE10
DOCUMENT_FRAGMENT_NODE11
NOTATION_NODE12
Feature - フューチャー

Feature は機能を拡張する仕組みです。他のシステムでは同様の仕組みをプラグインやアドオンと呼んでいたりもします。
uupaa.jsでは、部品のオンデマンドロード(必要になったタイミングでロードすること)が可能です。

部品の読み込みには、uu.feature() を使用します。

Class - The "OOP Class", The "CSS Class" - OOPクラス と CSSクラス

uupaa.js における"クラス"という言葉には、 オブジェクト指向用語(OOP)としての"クラス"と、CSS の"クラス"の二つの意味があります。

WindowReady
WindowReady は Web ページの表示に必要な全情報が揃った状態のことです。
WindowReady を補足し処理を行うには uu.ready() に関数を登録します。
旧来の方法(window.onload や <body onload>に関数を登録する方法)は一つの関数しか登録できませんが、 uu.ready() には関数を複数登録可能です(コールバックする順番はランダムです)。
WindowUnready
WindowUnready は現在のページから他のWeb ページに遷移する直前の状態のことです。
WindowUnready を補足し処理を行うには uu.unready() に関数を登録します。
uu.unready() には関数を複数登録可能です(コールバックする順番はランダムです)。
DomReady
DomReady は文書構造(DOM)の解析が終了した状態のことです。
DomReady を補足し処理を行うには uu.ready() に関数を登録します。
DomReady は WindowReady よりも先に成立します。DomReady で画面の構築を開始すると、ビジターのイライラを減らせます。
FeatureReady
FeatureReadyは、uu.feature() でロードが完了した状態のことです。
FeatureReady を補足し処理を行うには uu.ready() に関数を登録します。
FeatureReady 状態は、uu.feature() で読み込みを開始すると解除されます。
CanvasReady
CanvasReady は、HTML5::Canvas が使用可能な状態のことです。
CanvasReady を補足し処理を行うには uu.ready() に関数を登録します。
Jointed String - 結合文字列
セパレータで結合されている状態の文字列を結合文字列と呼びます。カンマ( "," )で結合している文字列をカンマ結合文字列, スペース( " " )で結合している文字列をスペース結合文字列と呼びます。
cssProp, css-prop

CSS2Properties で 定義されている CSS のプロパティ名(スタイル名)の形式を cssProp と呼びます。
例: fontWeight

CSS で使用可能なプロパティ名(スタイル名)の形式を css-prop と呼びます。
例: font-weight

Computed Style - 計算済みのスタイル

document.getComputedStyle() が返す値を計算済みのスタイルと呼びます。
計算済みのスタイルは、JavaScript で設定されている elm.style の値の他に、 HTML タグに直接書かれたインラインスタイル(<tag style="xx: ...">)や、 style 要素で設定されているスタイルも加味したもので、画面描画に使用される実際の値にかなり近いものです。

計算済みのスタイルの単位は(基本的には) px ですが、IEはそれ以外の値( "auto" )を返す場合もあります。
相対単位(pt,em 等)で値を指定している場合でも、getComputedStyle() が返す値の単位は px になります。
color は、"rgb(red,gree,blue)" や "#FFFFFF" に変換されます(ブラウザ毎に異なります)。
{ fontWeight: "normal" } を、{ fontWeight: "400" } に変換するブラウザもあります。
see: ブラウザ毎の getComputedStyle の戻り値

ParentHasLayout - Parent has Layout - レイアウト上の親要素
CSS の position が "relative" または "absolute" に設定されている最寄の親要素を ParentHasLayout と呼びます。
オフセット座標を返す関数の多くは、最寄の ParentHasLayout からのオフセット値を返します。
類似語に、IE の CSS バグの話題で頻出する MSDN::hasLayout があります。
IE6,7では、zoom = 1; とするだけで、インライン要素などが hasLayout=true な要素になりえますが、そのような要素は、ParentHasLayout とは呼びません。
IE8 の IE8モードでは hasLayout プロパティが削除されました。
Type "this" - this型
this 型は Object 型の別名(alias)です。
this を渡すことが可能な引数を、this 型と呼びます。
this 型の引数に undefined を渡すと window オブジェクト が指定された場合と同様に動作します。
Type "Mix" - Mix型
Mix 型はあらゆる型(object, Hash, number, string, boolean, ...)を意味する説明上の(擬似的な)型です。
あらゆる型を受け付ける引数があれば、その引数を Mix と呼びます。
Type "Hash" - Hash型

Hash 型は Object 型の別名(alias)です。
連想配列的な Object 型の変数を Hash と呼びます。

var hash = { a: 1, b: 2, c: 3 }; // Hashを生成

文字列 Index でアクセスする要素が混在する Array も Hash と呼びます。

var ary = [ 1, 2, 3 ]; // この時点では Array と呼ぶが
ary["StringIndex"] = "a"; // これ以後は Hash と呼ぶ
FakeArray - 擬似配列

便宜上 Array と同じように操作できるが、実体は Array や Hash ではなく、length プロパティを持つものを FakeArray(擬似配列) と呼びます。
代表的なものに、arguments, NodeList, document.images があります。

StringArray
文字列を要素とする Array( ["a", "b", ... ] ) を StringArray と呼びます。
文字列以外の要素(数値, function, null, undefined, element など)を含んでいる場合は、StringArray とは呼ばず、Hash と呼びます。 要素数ゼロの StringArray もありえます。
FunctionArray
Function を要素とする Array( [ function, ... ] )を FunctionArray と呼びます。
Function 以外の要素(数値, 文字列, null, undefined, element など)を含んでいる場合は、FunctionArray と呼ばず、Hashと呼びます。 要素数ゼロの FunctionArray もありえます。
ElementArray
Elementを要素とする Array( [ Element, ... ] )を ElementArray と呼びます。
Element 以外の要素(数値, 文字列, function, null, undefined, element など)を含んでいる場合は、ElementArray と呼ばず、Hashと呼びます。 要素数ゼロの ElementArray もありえます。
RectHash

RectHash は { x, y, w, h } を要素に持つ Hash です。
x が水平方向の座標, y が垂直方向の座標, w が水平方向の幅, h が垂直方向の高さ です。
矩形の座標/サイズを表現する入れ物として使います。
x, y, w, h 以外の要素を持つRectHashや、{ x, y } しか持たない Hash を RectHash と呼ぶ場合があります。

RGBAHash
RGBAHash は { r, g, b, a } を要素に持つ Hash です。
r, g, b には 0~255 の数値を指定します。a には 0.0~1.0 の数値を指定します。
var rbga = { r: 255, g: 255, b: 255, a: 1.0 }; // "white"
HSVAHash
HSVAHash は { h, s, v, a } を要素に持つ Hash です。
h には 0~360、s と v には 0~100 の数値を指定します。a には 0.0~1.0 の数値を指定します。
var hsva = { h: 360, s: 100, v: 100, a: 1.0 }; // "white"
Unicast - ユニキャスト
uu.msg.send() や uu.msg.post() で、誰か1人にメッセージを転送することをユニキャストと呼びます。
送信者自身にユニキャストすることもできます。
Multicast - マルチキャスト
uu.msg.send() や uu.msg.post() で、何人かに同じメッセージを転送することをユニキャストと呼びます。
Broadcast - ブロードキャスト
uu.msg.send() や uu.msg.post() で、全員に同じメッセージを転送することをブロードキャストと呼びます。
ブロードキャストでは、送信者自身にもメッセージが転送されます。
URLSafe64
RFC3548(The "URL and Filename safe" Base 64 Alphabet)で提唱されている Base64 の亜種です。
JavaScript の文字列(UTF-16)を UTF-8 に変換し、さらに通常の Base64 でエンコードを行った後に、 URL に含むことができない一部の記号("+", "/", "=")を、安全な記号("-", "_")に差し替えし、 末尾の"="を除去します。
デコードは、省略された末尾の"="を文字列の長さを元に補完し、差し替えた記号を元に戻した後で Base64 としてデコードします。
Singleton - シングルトン

Singletonは、「一つしか存在しないもの」という意味です。
シングルトンクラスは、何度 new しても常に一つの実体(の参照)を返すため、 スマートなグローバル変数 を生成できます。

var obj1 = new SingletonClass(); // インスタンスを生成
var obj2 = new SingletonClass(); // obj1の参照を取得
alert(obj1 === obj2); // true  (obj1とobj2は同じもの)
StackNumber - スタック番号
スタック番号 は 0 以上の整数です。 スタックが3個積まれている状態で、トップスタックのスタック番号は 2, ボトムスタックのスタック番号は 0 になります。
  │  │
  │■│ ← top stack(n=2)    最後に積まれたスタック
  │■│ ← n=1               二番目に積まれたスタック
  │■│ ← bottom stack(n=0) 最初に積まれたスタック
─┴─┴─