原型链

什么是原型链

原型链是指一个对象A链接着另外一个对象B。A[[prototype]] = B

如何实现原型链

new

Java 中的constructor是个特殊的函数。但是在JS里,它没有什么特殊的,或者可以说它只是正好叫‘constructor’。它只是以new 方式来调用,也就是函数的构造器调用。函数本身都一样,调用方式不一样。

out of thin air: 稀薄空气一般是在高海拔地区,这些地方因为空气稀薄,一般都是人迹罕至的,大家都不会预想这里会有人出现,所以如果一旦有人出现,那就是突然出现, in a sudden or unexpected way。

new 操作的逻辑

var a = new Fn()
  1. 创建了一个新对象a
  2. a.[[prototype]] 指向函数Fn的prototype属性
  3. this 指向a
  4. 除非函数返回自己的替换对象(这个对象每次也会创建新的),否则的话,new调用生成的函数会自动返回新构建的对象

Object.create

Object.create 的逻辑
A = Object.create(B)

  1. A.[[prototype]] = B
  2. 新建一个object

已知new 可以实现的功能是
C = new D()
C.[[prototype]] = D.prototype

所以
Object.create = function(proto) {
function Fn() {}
Fn.prototype = proto
return new Fn()
}

prototype属性

xx.prototype 是个独立的对象。

A instanceof B逻辑

沿着A[[prototype]] 链查找B.prototype 如果有,那么返回true。

U don't know JS yet

上面这张图中标示除了Object 和 Function之间的关系。可以解释

Object instanceof Function // true
Function instanceof Object // true

先看第一个,沿着Object[[prototype]] 链查看,看有没有Function.prototype
。 有,所以返回true。


第二个, 沿着Function[[prototype]] 链查看,也有Object.prototype。 所以结果也是true。


image.png

⚠️constructor不代表什么。没有什么特别的操作。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容