今天在看JS红宝书的时候,继承部分有个概念一直理解不到位,抓耳挠腮两个多小时终于有点思路,记录一下。
问题是这样的:
这段看的时候不是很迷惑,但是到了后面我就开始迷惑了
function object(o) {
function F() {}
F.prototype = o; //将F的原型对象指向o
return new F(); //返回一个F的实例对象
}
我的疑惑就是,怎么F函数的实例对象就突然变成o的副本了??
结合上下两张图片我画了一部分原型链,主要用来分析这个第二张图的第一行语句。
let prototype = object(superType.prototype); // 创建对象
怎么就p1就是副本了呢???
然后就开始写了简单的代码验证(验证constructor,事实上课本感觉也就是这个意思)
但是我想知道这个p1怎么来的?凭什么敢说和人家原型对象一样呢?(事实证明啥也不是,就是一个只知道白嫖人家原型对象的空实例对象。哭了,浪费我那么久时间...)
结果就是这么多,总结一下:之所以这个p1可以称之为那个原型对象的浅复制,就是因为原型链的原因。SuperType原型对象的constructor指针可以被访问,所造成的假象。
也是因为自己看书的时候看到复制就先入为主的认为是直接复制,平时缺少仔细读文档的习惯。如果有什么没写好的地方或者看不明白的地方欢迎交流。