原型链是 JavaScript 最基本的概念,之一。想要讲明白什么是原型链也不是那么容易的事情,MDN 上有一篇关于继承和原型链的文章,把原型链解释得很清楚,但是官方文档缺乏总结,看完之后可能只有一个模糊的概念,还是不能清晰地解释出,什么是原型链。

那么,简单少字的总结他来了:

  1. 原型链用来描述对象之间的关系
  2. prototype 是函数的特殊属性,指向它的原型对象[1]
  3. 原型是对象的一个属性,指向其构造函数的 prototype 属性,即构造函数的原型对象[2]
  4. 几乎所有对象都是位于原型链顶端的 Object 的实例,所以一个普通对象的原型就像一根一样,最终会指向 Object 的原型对象
  5. 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

yangholmes
60 声望0 粉丝

造车轮!造车轮!