�פ��Ȥ������äơ� js-object-clone ���꡼�����ޤ�����
����Ū�ˤ� 404 Blog Not Found:javascript - ECMAScript 5 �� Object.clone ��������Ƥߤ� ��֥�å��奢�åפ�����ΤǤ������㤤�⤢��ޤ���
- DOM object �� clone �ϼ�겼��
- prototype��ĥ�Ϥʤ�
Object.clone
���ɲ�
- ��Ӵؿ�
Object.equals
���ɲ� - ES5�����б�
- property descriptor�����Ƥ����/ʣ��
- .isExtensible, isSealed, isFrozen �ξ��֤����/ʣ��
SYNOPSIS
var src = { name: 'dankogai', lang: ['perl'] }; var dst = Object.clone(src); /* shallow copy */ log( Object.is(src, dst)); /* false */ log( Object.equals(src, dst) ); /* true */ dst.lang.push('javascript'); log(JSON.stringify(src.lang) ); /* ["perl","javascript"] because dst is shallow-copied */ dst = Object.clone(src, true); /* deep copy */ dst.lang = dst.lang.reverse(); log( JSON.stringify(src.lang) ); /* ["perl","javascript"] */ log( JSON.stringify(dst.lang) ); /* ["javascript","perl"] */
������󥫥����४�֥������Ȥ⥳�ԡ���ǽ�Ǥ�����
var Point = function(x, y) { if (!(this instanceof Point)) return new Point(x, y); this.x = x*1; this.y = y*1; }; Point.prototype = { distance: function(pt) { if (!pt) pt = Point(0,0); var dx = this.x - pt.x; var dy = this.y - pt.y; return Math.sqrt(dx*dx + dy*dy); } }; var src = Point(3,4); var dst = Object.clone(src, true); log( src === dst ); /* false */ log( Object.equals(src,dst) ); /* true */ log( dst.distance(Point(0,0)) ); /* 5 */
RegExp��Date�⥳�ԡ��Ǥ��ޤ���
var src = new Date(0); var dst = Object.clone(src, true) log( src === dst ); log( Object.equals(src, dst) ); log( dst ); src = /./g; dst = Object.clone(src, true); log( src === dst ); log( Object.equals(src, dst) ); log( dst );
�ष��ɬ�פ��ä��Τϡ�Object.equals
�������ä����⡣����Ҥˤʤä����֥������Ȥ���ӤȤ����Τϥƥ��Ȥ�񤯻��ˤ��ʤ�¿�Ѥ���ΤǤ��������Ǥ�idiom�Ȥʤä���������
var copyViaJSON = function(o){ return JSON.parse(JSON.stringify(o)) };
���Ȥ���ɤ����������б��Ǥ��ʤ���Ǥ���͡�undefined
��null
�ˤ����㤦�����������४�֥������Ȥ��Ȥ�.toJSON()
��������ʤ��ȻȤ�ʪ�ˤʤ�ʤ��ä��ꡣ_.clone�˻�äƤϡ����⤽��deep copy���Υ��ݡ��Ȥ��Ƥʤ��Ǥ������ޤ��Ƥ�ES5��property descriptor�ޤ��б����Ƥ����ΤȤʤ�Ȥɤ��ˤ⸫������ޤ���Ǥ�������
Enjoy (deeply)!
Dan the Man with too Many Objects to Compare and Copy
���Υ֥����˥����Ȥ���ˤ�����������ɬ�פǤ���
��������������
���ε����ˤϵ��ĥ桼�����������Ȥ��Ǥ��ޤ���