以下是常见 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
最后三行 是为了纠正这个问题的。