原型链是什么?

37 阅读1分钟

JavaScript的三座大山—原型随记 - 掘金 (juejin.cn)

怎么改变原型

看起来只要能改变实例x的隐藏属性__proto__就可以改变x的原型

x.__proto__=原型

但这不是标准推荐的写法,为了设置x.__proto__,推荐的写法是:

const x = Object.create(原型)          es6

// 或

const x =new 构造函数   // 会导致x.__proto__===构造函数.prototype          es5

原型解决了什么问题

在没有Class的情况下实现继承。以 a ===> Array.prototype ===> Object.prototype 为例,

  1. a是Array的实例,a拥有Array.prototype的属性
  2. Array继承了Object
  3. a是Object的间接实例,a拥有Object.prototype里的属性。

缺点

跟Class相比,不支持私有属性。