sk-t 前端面试

187 阅读1分钟

##Q 深拷贝的实现方式

  1. 原生一级拷贝Object.assign
  2. jquery.extend
  3. 递归(去除ownerProperty)
  4. lodash.deepClone 原理分析:juejin.cn/post/684490…
  5. 通过 Object.create
function deepCopy(obj) {
  var copy = Object.create(Object.getPrototypeOf(obj));
  var propNames = Object.getOwnPropertyNames(obj);
  
  propNames.forEach(function(name) {
    var desc = Object.getOwnPropertyDescriptor(obj, name);
    Object.defineProperty(copy, name, desc);
  });
  
  return copy;
}

var obj1 = { a: 1, b: {bc: 50, dc: 100, be: {bea: 1}} };
var obj2 = deepCopy(obj1);
console.log(obj2)
obj1.a = 20;
console.log(obj1)
console.log(obj2)
//Object {a: 1, b: Object}
//Object {a: 20, b: Object}
//Object {a: 1, b: Object}

分析:

Object.getPrototypeOf(obj):Object.getPrototypeOf( obj) === obj.__proto__
obj1 = { a: 1, b: {bc: 50, dc: 100, be: {bea: 1}} };
Object.getOwnPropertyNames(obj1)=>[a,b]
方法返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组。

async * 区别

www.cnblogs.com/tianzun-blo…