这是一个大概念题,答题思路为,大概念化成小概念(分割),抽象化成具体(举例)。
- 假设我们有一个普通对象 x={} ,这个 x 会有一个隐藏属性,叫做 ????? ,这 个属性会指向 Object.prototype ,即
x.__?????__ === Object.prototype // 原型
什么是原型?
- 假设有一个普通的对象
x={},这个x会有一个隐藏属性,叫做_?????_,这个属性会指向Object.prototype,即
x.__?????__ === Object.prototype // 原型
- 此时我们就说x的原型就是Object.prototype;
- 而这个 ????? 属性的唯一作用就是用来指向 x 的原型的。
什么事原型链?
假设我们有一个数组对象 a=[] ,这个 a 也会有一个隐藏属性,叫做 ????? , 这个属性会指向 Array.prototype ,即
a.__?????__ === Array.prototype
- 此时,我们说 a 的原型是 Array.prototype ,跟上面的 x 一样。但又有一点不一样, 那就是 Array.prototype 也有一个隐藏属性 ????? ,指向 Object.prototype , 即
// 用 x 表示 Array.prototype
x.__?????__ === Object.prototype
- 这样一来,a 就有两层原型:
-
- a 的原型是 Array.prototype
-
- a 的原型的原型是 Object.prototype 于是就通过隐藏属性 ????? 形成了一个链条:
解决了什么问题: 在没有 Class 的情况下实现「继承」。以 a ===> Array.prototype ===> Object.prototype 为例,我们说: 1. a 是 Array 的实例,a 拥有 Array.prototype 里的属性 2. Array 继承了 Object(注意专业术语的使用) 3. a 是 Object 的间接实例,a 拥有 Object.prototype 里的属性 这样一来,a 就既拥有 Array.prototype 里的属性,又拥有 Object.prototype 里的属 性。a ===> Array.prototype ===> Object.prototype -