1.new
new操作符做了这些事:
-
它创建了一个全新的对象。
-
它会被执行
[[Prototype]](也就是__proto__)链接。 -
它使
this指向新创建的对象。。 -
通过
new创建的每个对象将最终被[[Prototype]]链接到这个函数的prototype对象上。 -
如果函数没有返回对象类型
Object(包含Functoin, Array, Date, RegExg, Error),那么new表达式中的函数调用将返回该对象引用。sdhfjk kjsdhfkjas fhksajd
如何写出一个惊艳面试官的深拷贝?
function clone(target, map = new WeakMap()) {
if (typeof target === 'object') {
let cloneTarget = Array.isArray(target) ? [] : {};
if (map.get(target)) {
return map.get(target);
}
map.set(target, cloneTarget);
Object.keys(target).forEach((key) => {
cloneTarget[key] = clone(target[key], map);
});
return cloneTarget;
} else {
return target;
}
};