原理:

通过构造一个空对象、并设置原型链对象、然后返回出去进行扩展

代码理解

  1. function object(o) {
  2. function F() {}
  3. F.prototype = o
  4. return new F()
  5. }
  6. let user = {
  7. name: "z",
  8. age: 18,
  9. hobby:['找小姐姐','找富婆']
  10. }
  11. let user1 = object(user);
  12. console.log(user1)
  13. user1.hobby.push('找美女')
  14. let user2 = object(user);
  15. console.log(user.hobby) // hobby: (3) ['找小姐姐', '找富婆', '找美女']

缺点

  • 某个实例去改变原型会导致所有实例的原型都发送改变
  • 无法传递参数