原型链是 JavaScript 最基本的概念,之一。想要讲明白什么是原型链也不是那么容易的事情,MDN 上有一篇关于继承和原型链的文章,把原型链解释得很清楚,但是官方文档缺乏总结,看完之后可能只有一个模糊的概念,还是不能清晰地解释出,什么是原型链。
那么,简单少字的总结他来了:
- 原型链用来描述对象之间的关系
- prototype 是函数的特殊属性,指向它的原型对象[1]
- 原型是对象的一个属性,指向其构造函数的 prototype 属性,即构造函数的原型对象[2]
- 几乎所有对象都是位于原型链顶端的 Object 的实例,所以一个普通对象的原型就像一根链一样,最终会指向 Object 的原型对象
- Object 的原型对象也有原型,指向 null ,根据定义,null 没有原型,所以原型链的终点就是 null [3]
show me ur code:
[1]:我们可以看看字符串对象的例子
执行代码
console.log(String);
console.log(String.prototype);
可以得到类似的输出
ƒ String() { [native code] }
String {"", constructor: ƒ, anchor: ƒ, big: ƒ, blink: ƒ, …}
[2]:继续看字符串的例子
let str = new String('str');
console.log(str);
console.log(Object.getPrototypeOf(str));
console.log(Object.getPrototypeOf(str) === String.prototype);
可以得到类似的输出
String {"str"}
String {"", constructor: ƒ, anchor: ƒ, big: ƒ, blink: ƒ, …}
true
[3]:直接访问一下 Object
原型对象的原型
console.log(Object.getPrototypeOf(Object.prototype));
null
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。