构造函数原型重定向

  1. 应用场景:批量给构造函数的原型对象扩充属性/方法
  2. 问题:重定向后
    1. 原始浏览器开辟的原型对象可能会被释放掉
    2. 这样导致原始原型对象上的属性和方法会被清除掉(包含constructor
  3. 解决方法:
    1. 如果我们知晓原始原型对象上除了constructor没有其余的属性和方法
      1. 我们只需要在重定向的原型对象上自己手动设置constructor即可
    2. 如果我们确定或者不确定原始原型对象上是否存在其余的属性和方法
      1. 我们此时需要把原始原型对象上的内容copy一份,重新赋值给新的原型对象「对象合并处理
      2. **Object.assign(obj_1, obj_2)**
        1. 两个或者多个对象进行浅合并「右侧替换左侧
        2. 注意:并没有返回全新的一个合并后的对象,返回的值依然是obj1这个堆,只是把obj2中的内容都合并到obj1中
        3. 如果非要返回新的对象
          1. console.log(Object.assign({}, obj1, obj2));
          2. 此时没有改变obj1、obj2

纯粹对象:创建的是Object的实例 对象.__ proto__ === Object.prototype
原型重定向 - 图1

  1. function fun() {
  2. this.a = 0;
  3. this.b = function () {
  4. alert(this.a);
  5. }
  6. }
  7. fun.prototype = { // 自己重新赋值了prototype
  8. b: function () {
  9. this.a = 20;
  10. alert(this.a);
  11. },
  12. c: function () {
  13. this.a = 30;
  14. alert(this.a)
  15. }
  16. }
  17. var my_fun = new fun();
  18. my_fun.b(); // 0 先找私有
  19. my_fun.c(); // 30 私有没有,找公有