Exploring JS屬於Axel Rauschmayer先生Emanauten,一個非常流行的書ES6說,勘探Object.assign文本中的JS勘誤?
如果你想克隆有相同的原型,原來,你可以使用Object.getPrototypeOf()和的Object.create( ):
function clone(orig) { const origProto = Object.getPrototypeOf(orig); return Object.assign(Object.create(origProto), orig); }
這似乎是不正確的,雖然,
var a = {a:1};
var o1 = Object.create(a);
Object.getPrototypeOf(o1); //shows {a:1} of course
var o2 = Object.assign(o1);
Object.getPrototypeOf(o2); // also shows {a:1}
那麼,爲什麼他們說「相同原型爲原始「的克隆?看起來Object.assign
已經給它與原版相同的原型,看起來clone()
他們正在從原型創建所有可枚舉方法的副本,完全失去了原型的鏈接。
從節的開頭你鏈接到*「這方法將源代碼合併到目標中:它修改目標,首先將source_1的所有可枚舉屬性(非繼承)屬性複製到它中,然後複製source_2的所有屬性等等。最後,它返回目標。「*說'Object.assign'返回傳遞給它的第一個參數,也就是說你的應用程序實際上並沒有克隆這個對象。 –
你的代碼根本不會做「克隆」。您沒有在原型中使用Object.create,並且您不想在要克隆的對象上使用Object.getPrototypeOf,也不使用帶有兩個參數的Object.assign。所有這些都是重要的部分。 – Bergi