�פ��Ȥ������äơ� 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

Source:

' ).text(); } var query = {s:text}; if (lang) query['l'] = lang; var url = 'http://api.dan.co.jp/lleval.cgi'; var proto = 'json'; if ($.browser.msie || $.browser.opera){ url += '?c=?'; proto += 'p'; } /* falls back to JSONP */ $.get(url, query, function(json){ $(dstNode).html(json2table(json)).hide().show('slow'); }, proto); }; })(jQuery);