原型,原型链,call/apply

原创 Bios 随笔 js 66阅读 18 天前 举报

原文博客地址:https://finget.github.io/2018/09/13/proto/

JavaScript从初级往高级走系列————prototype

原型

定义: 原型是function对象的一个属性,它定义了构造函数制造出的对象的公共祖先。通过该构造函数产生的对象,可以继承该原型的属性和方法。原型也是对象。

用一张图简单解释一下定义。

  1. 每个函数上面都有一个原型属性(prototype),这个属性会指向构造函数的原型对象(Person.prototype)
  2. 每个函数的原型对象(Person.protorype)默认都有一个constructor属性指向构造函数本身(Person)
  3. 每个实例都有一个隐式原型(proto)指向构造函数的原型对象(Person.prototype)
  4. 每个原型对象也有隐式原型(proto)

constructor

Person.prototype:

图中浅紫色的都是自带的

proto

new

New的过程

  1. 声明一个中间对象
  2. 将中间对象的原型指向构造函数的原型
  3. 将构造函数的this指向中间对象
  4. 返回中间对象,即实例对象

JavaScript —— New

person.__proto__Person.prototype是指向同一个内存地址,这也就是 为什么实例没有属性或方法会到原型上去查找

原型链

先扔一张图:

例子:

上图中红线表示的就是原型链了

Object.create()

Object.create(null),null就是一个空对象,没有原型。这也是·typeof null == 'object'的原因

toString

undefinednull没有toString()

toString来自哪??

toString隐藏功能:判断变量、对象的类型

call/apply

call/apply不仅改变了this的指向,还会执行对应的方法

最后

创建了一个前端学习交流群,感兴趣的朋友,一起来嗨呀!

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复