The structured clone algorithm
The structured clone ìê³ ë¦¬ì¦ì ë³µì¡í JavaScript ê°ì²´ì ì§ë ¬íì ìí´ì HTML5 specificationì ìí´ì ì ìë ìë¡ì´ ìê³ ë¦¬ì¦ ì ëë¤. ì´ê²ì ìíê·¸ëí를 í¬í¨íë ê°ì²´ì ì§ë ¬í를 ì§ìí기 ë문ì JSONë³´ë¤ ë ì ì©í©ëë¤. â ê°ì²´ë ê°ì ê·¸ëíìì ë¤ë¥¸ê°ì²´ë¥¼ 참조íë ê°ì²´ë¥¼ 참조í ì ììµëë¤. ì´ë¬í ì¼ì´ì¤ë¤ììë structured cloneìê³ ë¦¬ì¦ì´ ìë§ë JSONë³´ë¤ ë í¨ì¨ì ì¼ ê²ì ëë¤.
ìê³ ë¦¬ì¦ì 본ì§ì ì¼ë¡ ì본 ê°ì²´ì 모ë íë를 ê±°ì¹ê³ ê° íëì ê°ë¤ì ìë¡ì´ ê°ì²´ë¡ ë³µì í©ëë¤. ë§ì½ íëê° ê°ì²´ë¥¼ ê°ì¡ë¤ë©´ 모ë íëì ê·¸ ìë¸íëê° ìë¡ì´ ê°ì²´ë¡ ë³µì ë ë ê¹ì§ ì¬ê·ì ì¼ë¡ ëìí©ëë¤.
JSONì ëë ì´ë
JSONì ë°ì´ëë structured cloneìê³ ë¦¬ì¦ì ì¬ë¬ê°ì§ íµì¬ ì´ëì´ ììµëë¤.
- Structured clonesì
RegExpê°ì²´ë¤ë ë³µì¬í ì ììµëë¤.. - Structured clonesì
Blob,FileìFileListê°ì²´ë¤ë ë³µì¬í ì ììµëë¤.. - Structured clonesì
ImageDataê°ì²´ë¤ë ë³µì¬í ì ììµëë¤. í´ë¡ ëCanvasPixelArrayí¬ê¸°(dimensions)ë ì본과 matchë ê²ì´ê³ ê°ì í½ì ë°ì´í°ì ë³µì 를 ê°ì§ëë¤. - Structured clonesì 참조ë¤ì ìí ê·¸ëíë¤ì í¬í¨í ê°ì²´ë¤ì ì¬ë°ë¥´ê² ë³µì í ì ììµëë¤.
structured clonesê³¼ í¨ê» ëìíì§ ìë ê²ë¤
ErrorìFunctionê°ì²´ë¤ì structured clone ìê³ ë¦¬ì¦ì ìí´ì ë³µì ë ì ììµëë¤; ì´ê²ì ìëíë©´DATA_CLONE_ERRexceptionì ëì§ ê² ì ëë¤.- DOM nodeë¤ì í´ë¡ íë ¤ê³ ìëíëê²ë ëì¼íê²
DATA_CLONE_ERRexceptionì ëì§ ê² ì ëë¤. - ê°ì²´ë¤ì ëªëª íë¼ë¯¸í°ë¤ì ë³´ì¡´ëì§ ììµëë¤:
RegExpê°ì²´ë¤ì lastIndexíëë ë³´ì¡´ëì§ ììµëë¤.- Property descriptors, setters, ê·¸ë¦¬ê³ getters (ì´ê²ë¤ê³¼ ë¹ì·í ë©íë°ì´í°ê°ì 기ë¥ë¤)ì ë³µì ëì§ ììµëë¤. ì를ë¤ì´ì í ê°ì²´ê° íë¡í¼í° ëì¤í¬ë¦½í°ë¥¼ ì¬ì©íì¬ ì½ê¸°ì ì©ì¼ë¡ ë§í¬ëì´ì ¸ ìë¤ë©´ ì´ê²ì ì½ê¸°-ì°ê¸°ê° ê°ë¥íëë¡ ë³µì ë ê²ì ëë¤. ì´ê²ì´ ëí´í¸ ì¡°ê±´ì´ê¸° ë문ì ëë¤.
- íë¡í íì ì²´ì¸ì ê±°ì¹ì§ìê³ ë³µì ëì§ ììµëë¤.
Supported types
| Object type | Notes |
|---|---|
| All primitive types | íì§ë§ ì¬ë³¼ë¤ì í¬í¨íì§ ììµëë¤. |
| Boolean object | |
| String object | |
| Date | |
| RegExp | lastIndexíëë ë³´ì¡´ëì§ ììµëë¤. |
Blob |
|
File |
|
FileList |
|
| ArrayBuffer | |
| ArrayBufferView | ì´ê²ì 기본ì ì¼ë¡ int32Arrayë 기íê°ì typed arraysì 모ë ê²ì ì미í©ëë¤. |
ImageData |
|
| Array | |
| Object | ì´ê²ì ê·¸ë¥ plainê°ì²´ë¤ì í¬í¨í©ëë¤.(e.g. ê°ì²´ 리í°ë´) |
| Map | |
| Set |
ë ë¤ë¥¸ ë°©ë² : ê¹ì ë³µì¬(deep copyâ)
ê°ì²´ì ê¹ì ë³µì¬(deep copy)를 ìíë¤ë©´(모ë íë¡í íì ì²´ì¸ê³¼ ë´í¬ë ìì±ë¤ ê¹ì§ë), ëë¤ë¥¸ ì 근방ìì ì¬ì©í´ì¼ë§ í©ëë¤. ìëì ìì 를 íì¸íì¸ì.
function clone(objectToBeCloned) {
// Basis.
if (!(objectToBeCloned instanceof Object)) {
return objectToBeCloned;
}
var objectClone;
// Filter out special objects.
var Constructor = objectToBeCloned.constructor;
switch (Constructor) {
// Implement other special objects here.
case RegExp:
objectClone = new Constructor(objectToBeCloned);
break;
case Date:
objectClone = new Constructor(objectToBeCloned.getTime());
break;
default:
objectClone = new Constructor();
}
// Clone each property.
for (var prop in objectToBeCloned) {
objectClone[prop] = clone(objectToBeCloned[prop]);
}
return objectClone;
}