Kazuho@Cybozu���ޡ����Ĥ⤢�꤬�Ȥ��������ޤ���
Kazuho@Cybozu Labs: JavaScript �� String ����Ѿ�������������������ȡ�String ����Ѿ��äݤ����Ȥ��Ǥ��ޤ�������ʴ�����
���������ץ��ȥ�����Ū�Ѿ���ǥ�δ����Ǥ�����ޤ�����
Atomic��Object��Ѿ�
����ϡ��ʲ��Τ褦�����Ū�˽���ޤ���
var Atomic = function(C){ var P = function(v){ this._v = v; }; P.prototype = new C; P.prototype.valueOf = function(){ return this._v.valueOf(); } P.prototype.toString = function(){ return this._v.toString(); } return P; }
�Ȥ��Ȥ��Ϥ���ʡ�
var MyStr = Atomic(Str); MyStr.prototype.x = function(n){ var str = ''; while (n--) str += this; return new MyStr(str); }; var mystr = new MyStr("foobar");
�����������ΤޤޤǤ�Atomic�ʾ��Ȥ����Ǥʤ�����ʬ���ʤ���Фʤ�ޤ���
object()
�γ�ĥ
�����ǡ�object()
��ʲ��Τ褦�˳�ĥ���ޤ���
var object = function(obj, base) { var P; switch ( typeof(obj) ) { case "boolean": case "number": case "string": P = Atomic((base || obj).constructor); break; // case "array": typedof([]) is "object". case "object": P = function(){}; P.prototype = (base || obj); break; default: return; }; P.prototype.method = function(o, f){ if (typeof(o) == "string"){ P.prototype[o] = f; }else{ for (var p in o){ P.prototype[p] = o[p]; } } } return new P(obj); }
����ǡ��ɤ��Object���Ф��Ƥ⡢obj.method()
��Ȥäƥ᥽�åɤ��ɲäǤ��ޤ���
var mystr = object("foobar"); mystr.method('x', function(n){ var str = ''; while (n--) str += this; return new MyStr(str); });
�����������ΤޤޤǤ�Singleton Method���ɲä�������ʤ����Ȥˤʤ�ޤ�����Ϥ��硹Ū�˻Ȥ��ˤ�
var MyStr = function(o){ // constructor ����� } var mystr = new MyStr("foobar"); var double = mystr.x(2);
�Τ褦�ˤ������Ȥ����Ǥ���
Fake Constructor�����
����MyStr()�������ɤ�����Ф褤�Ǥ��礦������������Ф褤�ΤǤ���
var MyStr = function(o){ var self = object(o); self.method({ 'x': function(n){ var str = ''; while (n--) str += this; return new MyStr(str); }, /* ¾��method�⤳������� */ }); return self; }
���������ܤ���ĺ�������Τϡ�MyStr()
��this�ˤϥΡ����å��ʤ��ȤǤ���������MyStr.prototype.x = function(){ /*... */ }
�Ͻ���ޤ��󡣤���������������self.method()
��ô�äƤ��ޤ���
���Ȥϡ�
var mystr = new MyStr("foobar"); // �¤�new�Ϥ��äƤ�ʤ��Ƥ�褤�� var double = mystr.x(2);
�Ȥ���Ф����櫓�Ǥ���
�ǥ�
�ޤȤ��ȡ�����ʴ����ˤʤ�ޤ���
Boolean
Number
String
Array
Object
�ʤ�Â�ˤ����äƤʤ��ʤ�ȴ���ʤ��ä��ɤ�ȴ������ʬ�Ǥ���
Enjoy!
Dan the Prototyper
���Υ֥����˥����Ȥ���ˤ�����������ɬ�פǤ���
��������������
���ε����ˤϵ��ĥ桼�����������Ȥ��Ǥ��ޤ���