• 关于JavaScript面向对象中构造函数和原型对象的学习与理解


    📚关于面向对象

    面向对象就是把需要解决的问题分解成一个个对象,建立对象不是为了实现一个步骤,而是为了描述每个对象在解决问题中的行为,面向对象的核心是对象。

    关于面向对象思想,我们可以将同一类事物的操作代码封装成对象,将用到的变量和函数作为对象的属性和方法,然后通过对象去调用,这样可以使代码结构清晰、层次分明。在团队开发中,使用面向对象思想编程可以帮助团队更好地协助分工,提高开发效率。

    通过下面这张图片我们可以大致了解面向对象所包含的内容 

    ❗关于面向对象编程的优势如下。

    • 模块化更深,封装性强。
    • 更容易实现复杂的业务逻辑。

    • 更易维护、易复用、易扩展。

    ❗关于JavaScript开发中的面向对象设计思想,以及类的基本使用就不一一介绍了

    📚构造函数和原型对象

    1️⃣构造函数

    构造函数主要用来创建对象,并为对象的成员赋初始值。我们可以把对象中的一些公共的属性和方法抽取出来,封装到构造函数中。

    1. function Person (name, age) {
    2. this.name = name
    3. this.age = age
    4. this.say = function () {
    5. console.log('i can say')
    6. }
    7. }
    8. const p1 = new Person('a', 21)
    9. const p2 = new Person('b', 20)
    10. console.log(p1.name)
    11. console.log(p2.age)
    12. p2.say()

    上述代码用面向对象思想封装了一个Person构造函数,在构造函数中,有name和age两个属性,以及say()方法。

    ❗构造函数和类的区别

    类中的成员方法是定义在类中的,使用类创建对象后,这些对象的方法都是引用了同一个方法,这样可以节省内存空间。

    1. class Person {
    2. say () {
    3. console.log('hi')
    4. }
    5. }
    6. const p1 = new Person()
    7. const p2 = new Person()
    8. console.log(p1.say === p2.say)

    使用构造函数创建的对象并不是引用同一个方法,示例代码如下。

    1. function Person () {
    2. this.say = function () {
    3. console.log('i can say')
    4. }
    5. }
    6. const p1 = new Person()
    7. const p2 = new Person()
    8. console.log(p1.say === p2.say)

    2️⃣原型对象

    为了解决上述问题,就需要利用原型对象来实现。

    在JavaScript中,每个构造函数都有一个原型对象存在,这个原型对象通过构造函数的prototype属性来访问,示例代码如下。

    1. function Play () {
    2. }
    3. console.log(Play.prototype)
    4. console.log(typeof Play.prototype)

    在上述代码中,Play函数的prototype属性指向的对象就是Play的原型对象。

    利用原型对象,可以实现为所有的实例对象共享实例方法,我们可以将实例方法定义在原型对象中,然后所有的实例方法就都可以访问原型对象的方法了。因此,原型对象其实就是所有实例对象的原型。下面我们通过代码演示原型对象的使用。

    1. function Person (name) {
    2. this.name = name
    3. }
    4. Person.prototype.sayHello = function () {
    5. console.log('你好,我叫' + this.name)
    6. }
    7. const p1 = new Person('张三')
    8. const p2 = new Person('李四')
    9. console.log(p1.sayHello === p2.sayHello)// 输出结果:true
    10. p1.sayHello()// 输出结果:你好,我叫张三
    11. p2.sayHello()// 输出结果:你好,我叫李四

     从上述代码可以看出,实例对象p1和p2原本没有sayHello()方法,但是在为原型对象添加了sayHello()方法以后,p1和p2就都拥有了sayHello()方法,并且是同一个方法。在原型对象的方法中,this表示的是调用此方法的实例对象。

  • 相关阅读:
    Linux:ssh免密登陆
    vue3中使用element plus
    Qt中的单例模式
    Chapter5:Additional Control Information
    离散数学复习:命题逻辑
    【UiBot】RPA流程机器人有几种类型?
    智能制造存在哪些难点?如何去解决?
    Postman —— HTTP请求基础组成部分
    Python的文件操作
    智能运维应用之道,告别企业数字化转型危机
  • 原文地址:https://blog.csdn.net/weixin_53231455/article/details/125383083