手写代码

90 阅读1分钟

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;
    }
};

面试题:你能写一个Vue的双向数据绑定吗?