JS原型和原型链

1. prototype 即原型对象,它记录着函数对象的一些属性和方法,prototype 对函数对象是不可见的,prototype 的主要作用就是继承。 通俗一点讲,prototype 中定义的属性和方法都是留给自己的 “后代” 用的,因此,子类完全可以访问prototype中的属性和方法。

2. __proto__ ,它存在于普通对象和函数对象中,它的作用就是引用父类的 prototype 对象,JS在通过 new 操作符创建一个对象的时候,通常会把父类的 prototype 赋值给新对象的 __proto__属性,这样就形成了一代代传承。

3. 如图所示,f.prototype 的 __proto__ 中保存的是 Object.prototype,Object.prototype 对象中也有 __proto__,而从输出结果看,Object.prototype.__proto__ 是 null,表示 obj 对象原型链的终结。

4. 原型链的形成真正是靠__proto__ 而非prototype,当JS引擎执行对象的方法时,先查找对象本身是否存在该方法,如果不存在,会在原型链上查找,但不会查找自身的prototype。

5. 一个对象的 __proto__ 记录着自己的原型链,决定了自身的数据类型,改变 __proto__ 就等于改变对象的数据类型。

6. 函数的 prototype 不属于自身的原型链,它是创建子类的核心,决定了子类的数据类型,是连接子类原型链的桥梁。

7. 在原型对象上定义方法和属性,是为了被子类继承和使用。

推荐阅读更多精彩内容

  • 学习使用过js的人一开始都会觉得js简单,这是因为js语法简单,学习过编程语言的人,很容易掌握js的基本语法并按要...
    易则知阅读 1,014评论 0 11
  • 声明:此文为转载文章,为了自己看起来方便特此重新排版,等日后看懂了再自己整理疏解,查看原文请点击这里。 正文: J...
    辞镜朱颜阅读 302评论 0 1
  • 什么是原型语言 只有对象,没有类;对象继承对象,而不是类继承类。 “原型对象”是核心概念。原型对象是新对象的模板,...
    zhoulujun阅读 1,906评论 0 12
  • 在这条亲密无间路上 从这头走向那头的我像你 从那头走来的你像我 寒来暑往 别过悲伤和欢笑 没人能够只靠移动沉重的步...
    柔婉的雨阅读 37评论 0 0
  • 喝一杯干柴烈酒, 饮一首古怪诗文。 听一曲甘肠寸断, 道一声侠骨柔情。 朋相聚,多离散。 劝酒未把壶喝干, 闻酒不...
    今古传奇吴总阅读 135评论 1 6