好久没发博客 这学期转前端了
首先挂上我看的资料
感谢这两位大佬
说明了原型链的产生缘由
Javascript继承机制的设计思想 - 阮一峰的网络日志 (ruanyifeng.com)
完整的说明的原型链的结构
帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)_码飞_CC的博客-CSDN博客_js prototype
建议先看上面两篇文章
个人总结
-
js万物皆对象 函数实际上也是一个对象
-
__proto__ 在浏览器的控制台打印是[[prototype]] __proto__和coustructor属于对象里的东西 prototype属于函数 但是函数也是对象所以也具有__proto__和coustructor
-
prototype 本身也是对象 但是是作为继承链的重要部分 普通对象就是实例 我们日常使用的对象
普通对象 | prototype | 函数 | |
---|---|---|---|
[[prototype]] | 指向所在原型链的上一级的prototype | 指向所在原型链的上一级的prototype | 指向所在原型链的上一级的prototype |
coustructor | 指向所在原型链的上一级构造函数 | 当前层级的构造函数 | 指向所在原型链的上一级构造函数 |
prototype | 没有 | 没有 | 指向同层级的prototype |
可以看的出来 [[prototype]]永远指向当前原型链位置中的上一级的prototype
coustructor指向当前层级的构造函数 当本身为构造函数或者当前层没有的使用 就指向上一层
prototype为构造函数唯有的属性 同时一旦创建函数 prototype就自动生成 指向原型 也就是prototype
来 上一段代码
看懂你就会了
function a(){};
a.prototype.look = "go111";
function b(){};
b.__proto__=a.prototype;
console.log(b.look);
结果是 go111