美文网首页
JS原型和原型链

JS原型和原型链

作者: RadishHuang | 来源:发表于2021-06-29 21:05 被阅读0次

先看如下代码,创建一个People的类,然后实例化一个对象出来。

class Student {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  sayHi() {
    console.log(` 自我介绍 : 我是 ${this.name} 年龄 ${this.age}`);
  }
}

let xialuo = new Student('夏洛', 19);

image.png

原型(对象属性)

  • Javascript规定,每一个class都有一个prototype显示原型。
  • 注意必须是函数,上面可以看到,实例化出来的对象,是没有prototype的属性的。
  • 每个实例对象都有自己的隐式原型。__proto__
  • 对象的隐式原型__proto__和函数的显示原型prototype是一样的。
image.png

执行流程。

  • 对象调用sayHi的方法的时候,会先从自己的属性和方法上找。
  • 如果找不到,就往隐式原型__proto__找。其实这个步骤就是叫做原型链。

为了体现出原型链,我们在多创建一个类出来。

class People {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  eat(){
    console.log(` 我是一个人类 我是${this.name} 我可以吃饭`)
  }
}

class Student extends People {
  constructor(name, age) {
    super(name, age);
    this.job = '学生'
  }

  sayHi() {
    console.log(` 自我介绍 : 我是 ${this.name} 年龄 ${this.age} 我职业是 ${this.job}`);
  }
}

let xialuo = new Student('夏洛', 19);

image.png
  • 当我们打印出xialuo的隐式原型的时候,可以发现,里面的构造函数就是类。所以当xialuo调用eat的方法时候,会先从自己的属性方法上找,如果没有,依次在隐式原型中查找。
image.png
  • 展开到最底层的时候,会发现最后的根节点是Object的类型。所以我们去使用toString,或者hasOwnpropetry的时候,能访问的到。
image.png
  • 创建xialuo这个对象的时候,我们说过它可以调用sayHi这个方法,或者是eat的方法。但是xialuo.proto也有sayHi的方法。那就延伸一个疑问。这两个打印出来分别会是什么?

  • 我们知道,this的指向一般是指向调用者。也就是xialuo.sayHi();的this指向的是xialuo这个对象,xialuo这个对象是有自己的name和age。xialuo.proto.sayHi()的this指向的是xialuo.proto,这个是没有name和age属性的,因此打印出来是undefined。

xialuo.sayHi();
xialuo.__proto__.sayHi()
image.png

相关文章

  • 廖雪峰JS小记

    (function(){})() 原型,原型链 浅谈Js原型的理解JS 原型与原型链终极详解 对象 对象:一种无序...

  • JS的__proto__和prototype

    最近在回顾JS的原型和原型链的知识,熟悉JS的同学都知道JS的继承是靠原型链实现的,那跟原型链相关的属性__pro...

  • Javascript(三)之原型继承理解

    进阶路线 3 原型继承 3.1 优秀文章 最详尽的 JS 原型与原型链终极详解 一 最详尽的 JS 原型与原型链终...

  • 2022前端高频面试题

    JS相关 1.原型和原型链是什么 原型和原型链都是来源于对象而服务于对象的概念js中引用类型都是对象,对象就是属性...

  • 关于JS中的原型和原型链

    目录 关于js 对象和原型 原型链 基于原型链的继承 参考资料ECMAScript 6 入门JavaScript原...

  • 深入javascript之原型和原型链

    原型和原型链是js中的难点也是重点,明白了原型和原型链会让我们在后面不管是学习还是工作都会更加高效,并且原型和原型...

  • JavaScript原型对象与原型链

    一、前言 原型和原型链是 JavaScript中不可避免需要碰到的知识点,在刚开始学习 JS 时,原型和原型链都是...

  • 原型和原型链

    今天发现一张特别好的图(↑↑↑上图↑↑↑),对原型和原型链的理解特别直观友好。 原型和原型链 基础储备:每个 JS...

  • 2018-01-09 关于javascript原型链的思考 pl

    s 深入理解原型和原型链? 构造函数 理解原型和原型链 new的时候js都干了什么? 一个实现继承的demo 构造...

  • js基础(三)

    js基础 原型链和原型对象 ... ... js没有继承原型对象prototype通常用来添加公共的属性或行为且只...

网友评论

      本文标题:JS原型和原型链

      本文链接:https://www.haomeiwen.com/subject/wnikultx.html