Javascript 中 extend 代码的解释

232 阅读1分钟

以下是常见 extend 的代码段:

function extend(subClass, superClass) {
  var F = function() {};
  F.prototype = superClass.prototype;
  subClass.prototype = new F(); 
  subClass.prototype.constructor = subClass;

  subClass.superclass = superClass.prototype;
  if(superClass.prototype.constructor == Object.prototype.constructor) {
    superClass.prototype.constructor = superClass;
  }
}

作者:路易斯
链接:https://juejin.cn/post/6844903475021627400
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

其中 最后三行我不理解:

if(superClass.prototype.constructor == Object.prototype.constructor) {
    superClass.prototype.constructor = superClass;
}

最后查到资料:
stackoverflow.com/questions/2…
原来有可能用户擅自改些了 Object 的 prototype:

function Foo () {};
Foo.prototype = {
  bar: 'baz'
};

var foo = new Foo();
foo.constructor === Object; // true, but `constructor` should refer to Foo

最后三行 是为了纠正这个问题的。