Object.extend調査

解説

Object.extend = function(destination, source) {
  for (property in source) {
    destination[property] = source[property];
  }
  return destination;
}

以上。(笑)
いや、要するに全コピーしてるだけなのだが、destinationが初期化されていないので、全てのメンバが追加される動作になる点に注意。
元メンバにメンバを追加=Object.extendで継承を再現、というわけだ。
overrideについては検証していないしうろ覚えで申し訳ないが、確かECMAScriptは先定義優先だった気はするが、Object.extendは=で代入しているので全ては強制的にoverrideされることになると思われる。


わかりやすい例だとこの辺りだろうか。

function $H(object) {
  var hash = Object.extend({}, object || {});
  Object.extend(hash, Enumerable);
  Object.extend(hash, Hash);
  return hash;
}

$H関数というのは・・、
まず空のオブジェクトを作成する。これをAとする。
Aに引数(または空のオブジェクト)を追加して、さらにEnumerableとHashの機能を追加する。
この拡大作業で作成された列挙可能なオブジェクト、Aをreturnで返す。
これが$H関数の全てだ。
Object.extendによって名前から意味も伝わりやすいし、記述も簡略化される。

結論

  1. Object.extendはprototype.jsの便利関数
  2. base.jsの11行目以外で定義されているように見えたのは、Object.extendを使用しているところの勘違い。

2を間違えないようにするためには、オブジェクトリテラルに関する勉強が役に立つ。