����Ϥ����Ȥ��ơ�

IT�ﵭ - JavaScript ��̾������
����ܥ�ξ��ͤ������礭������Ȥʤ롣������ɽ�㤬 Firefox �γ�ĥ��ǽ��Υ���ܥ�Ǥ��롣

�����JS���Υ�ޥ̥�����amachang�ʤ�Ȥˤ�������Ǥⵯ��ȴ���˥����ҡ����򵤤�������̤���������Ƭ�ǤϤĤ��Ƥ���

window['http://d.hatena.ne.jp/amachang/']={}; // URI
(function(){with(this){
  // �����˥����ɤ��
}}).apply(window['http://d.hatena.ne.jp/amachang/']); // URI

����ϤդĤ���

// Namespace jp.ne.hatena.d.amachang a la Java
if (jp == undefined) jp = {};
if (jp.ne  == undefined) jp.ne = {};
if (jp.ne.hantena  == undefined) jp.ne.hantena = {};
if (jp.ne.hantena.amachang  == undefined) jp.ne.hantena.amachang = {};

��Χ���ˤ�뤫��

function Namespace(str){
  var ns = str.split('.');
  var here = window;
  for (var i = 0, l = ns.length; i < l; i++){
      if (typeof(here[ns[i]]) == 'undefined') here[ns[i]] = {};
      here = here[ns[i]];
  }
  return here;
}

�ȤǤ⤷�Ƥ����ơ�

new Namespace('jp.ne.hatena.d.amachang');

�Ȥ�����������������ʤ顢

(function(){with(this){

  var hoge     = 'hoge'; // ���Υ���������Ƕ�ͭ���륷��ܥ�
  this.fuga    = 'fuga'; // Ʊ��̾�����֤Ƕ�ͭ���륷��ܥ�
  window.piyo  = 'piyo'; // �������Х�Ƕ�ͭ���륷��ܥ�

  alert(hoge); // hoge
  alert(fuga); // fuga
  alert(piyo); // piyo

}}).apply(window['http://d.hatena.ne.jp/amachang/']);

��function������with����ޤ�����apply����Ȥ�����ˡ�ʤ��Ǥ⡢

var ns = new Namespace('jp.ne.hatena.d.amachang');
var hoge     = 'hoge'; // ���Υ���������Ƕ�ͭ���륷��ܥ�
ns.fuga      = 'fuga'; // Ʊ��̾�����֤Ƕ�ͭ���륷��ܥ�
window.piyo  = 'piyo'; // �������Х�Ƕ�ͭ���륷��ܥ�

�Ǥ����Τǡ������줤��Ƭ�Ǥ�(�äƻ伫�Ȥ������줤�ˤʤä����ᤷ���ʤ��Τ�����)���Ȥ��Ĥ��Ƥ��륳���ɤˤʤ롣

���ʤߤˡ����������פ�Chapter 10��namespace�˰��Ƥ��Ƥ��ơ��侩���Ƥ���Τ���Ϥꤳ�������ˡ�ʤΤ����ɡ�typeof(ns) == 'undefined'����ʤ���!ns��namespace��¸��Ƚ��򤷤Ƥ���Ȥ��������ޥ��������ȡ�Namespace pseudoconstructor �ϻ�λפ��Ĥ���ns = jp.ne.hatena.d.amachang;������¤ꡢwith�Ϥ�����ȤǤ����Ȼפ���

Dan the Javascripter

�ɵ�:ns == undefined��typeof(ns) == 'undefined'���ѹ���������λ�Ŧ�˲ä���typeof(ns) == 'undefined'���������̸ߴ�����⤤��defined��exists���ʤ��Ȥ����Τ⤭�Ĥ���Τ����롣