简约风解析 javascript 原型及原型链

一般情况下,javascript中万物皆对象,它有两大类数据类型:

值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。

引用数据类型:对象(Object)、数组(Array)、函数(Function)

js定义的变量,均为对象,它自身拥有_proto_这个指针,它指向构造它的对象的对象的prototype,prototype是一个属性,本身也是一个对象,因此prototype也有_proto_指针,如图所示


a这个变量是字符串,相当于new String('233'),构建它的对象为String, 据图可知,a._proto_ === String.prototype,即_proto_为指针,指向构造它的对象的对象 的prototype。

String, Number,Array,Object等,它们可以通过new关键字来创建,可说是Function的实例,而Function.prototype为匿名函数,如图,可证所有的函数都有prototype属性,拥有prototype属性的对象大部分(某些不能使用new关键字创建的工具函数,像Math)为函数,从此可以看出Function在js里是食物链的项端呀


看图分析:


person是Person的一个实例,综上所述,实例对象的_proto_指针是指向创建它的对象的对象的prototype,person实例是可以访问挂载在Person的原型上的say方法的,也就是说,_proto_是原型链上的节点,是一个关键节点,prototype是原型链的组成,当实例访问一个方法或属性时,它会先在自身查找,透过_proto_,然后再沿原型链找,找到则调用,没找到报错,如果原型链本身没有的话,它自身透过_proto_去查找它的原型链,直到Object.prototype(javascript中,对象的最终原型链为Object.prototype, Object.prototype._proto_ 为null)查到这个都没有的话,那就真的没有了。

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

推荐阅读更多精彩内容

  • 什么是原型语言 只有对象,没有类;对象继承对象,而不是类继承类。 “原型对象”是核心概念。原型对象是新对象的模板,...
    zhoulujun阅读 2,353评论 0 12
  • JS中原型链,说简单也简单。 首先明确: 函数(Function)才有prototype属性,对象(除Object...
    前小白阅读 3,961评论 0 9
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 5,162评论 0 21
  • 不要说我变了 是人都会变 不要说我变的快 是你让我变的快 不要说我变的冷了 是你让我有了 一颗冰冷的心 时光匆匆 ...
    从前慢QAQ阅读 409评论 0 3
  • 今天下午,我们开展了一堂生动有趣的社团课,老师让我们准备好各种植物的种子,我准备了有黑豆、黄豆、绿豆、红豆、...
    高杉杉阅读 362评论 0 0