发新贴  快速回复

为什么constructor指向一致,却不让他们的原型对象一致那?
明明返回出来的函数,使用new去创建新对象,为很么还要修改constructor指向?

妙味用户595256
2021-02-25 10:41
 // Object.create
    function Mp(arg) { };
    Mp.prototype.say = 'yes';
    Mp.prototype.done = function () { };

    function Test() { }
    // 让Test原型等价Mp.prototype
    // 缺点: 修改Test.prototype原型上方法,会同步到Mp.prototype
    Test.prototype = Mp.prototype;
    console.log(new Test().say); // yes
    console.log(Test.prototype)

    // 让Test原型等于,由Mp.prototype作为原型创建出的新的对象
    // 优点: 修改Test.prototype原型上方法,不会同步到Mp.prototype, 因为Mp.prototype存在Test.prototype.__proto__
    Test.prototype = Object.create(Mp.prototype);
    Test.prototype.say = 'no'
    console.log(new Test().say); // yes
    console.log(Test.prototype)
 
 
 

   Function.prototype.myBind = function (context, ...arg) {
      var self = this; //缓存绑定的函数
      var Bound = function (...arg2) {
        self.apply(context, [...arg, ...arg2])
      };
      // 如果不绑定self原型上方法,怎么返回出去的Bound函数,作为构造函数,创建出的新对象,没有原型链上的方法
      // Bound.prototype = self.prototype; 共享同一个对象
      Bound.prototype = Object.create(self.prototype);
      Bound.prototype.constructor = self;
      return Bound;
    };

    let fn1 = man.myBind(obj, 50); // 明明返回出来Bound函数,使用new去创建新对象,为很么还要修改constructor指向?
    console.log(fn1.prototype.constructor === man.prototype.constructor); // 为什么constructor指向一致,却不让他们的原型对象一致那?

本帖内容针对以下视频发布:

1-手写bind源码实现
登录 后才可以发表回复