Я работаю на простой функции клона[[класс]] недвижимость в ES2015
var shallowCopy = function (value) {
// in ES2017 we can use
// return Object.create(Object.getPrototypeOf(value), Object.getOwnPropertyDescriptors(value));
let propDescriptors = {};
for (let i of Object.getOwnPropertyNames(value)) {
propDescriptors[i] = Object.getOwnPropertyDescriptor(value, i);
}
return Object.create(Object.getPrototypeOf(value), propDescriptors);
};
Я понимаю, это поведение, которое Object.prototype.toString.call(shallowCopy([]))
является [object Object]
, не [object Array]
.
Но некоторые новые типы в ES6 хорошо выглядеть
Object.prototype.toString.call(shallowCopy(new Set())) // [object Set]
Object.prototype.toString.call(shallowCopy(new Map())) // [object Map]
Может кто-нибудь сказать мне, почему эти объекты ведут себя по-разному?
Будет ли изменено это поведение в будущем?
спасибо.
Там нет [[класс]] поле в ES6 больше, [ 'Object.prototype.toString' ] (http://www.ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) работает сейчас – Bergi