!(面对)对象,构造函数,包装类

本文详细介绍了JavaScript中对象的创建方法,构造函数的使用与内部原理,以及如何通过构造函数创建独立的对象实例。此外,还探讨了对象属性的添加方式,并对比了document.write与console.log的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面向对象编程

对象是什么?为什么要面向对象?面向对象的优势? =>简化了我们对于流程部分的岔路准备

面向对象的思想中有两个重要概念:类、对象。
类:具有相同特征和行为的事物的抽象
对象:类的实例

特点:逻辑迁移更加灵活、代码复用性更高、高度模块化
经典例子:
main.js —>new Vue() // 实例化

  • 面向对象是以对象功能来划分问题,而不是步骤。
    面向对象是把事务分解成为一个个对象,然后由对象之间分工与合作。

  • 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的一次调用就可以了。

面向对象的特性

封装性把一个具有相同的特征和行为的客观事物封装成抽象的类。类可以把自己的数据及方法让可信的类或则对象操作,类中的数据和方法可以私有化,让对象中的数据和方法提供了不同程度的保护,但是值得注意的是,在ES6中的类,没有提供类的私有化属性,参考上文,因此严格意义上说,ES中的面向对象思想与传统的基于类的面向对象有一定的差异。
继承性让某一个类型的对象获得另一个类型对象的属性和方法。继承能够使用现有类的所有功能,并能无需重新编写原有类的情况下,对现在功能进行扩展。继承可分为实现继承(直接使用父类的属性及方法)和接口继承(使用属性和方法的名称,在子类中提供实现的能力)。不过在js中继承被简单化为:获取存在对象属性和方法的一种方式。在js中有很多种方式来实现继承下文中我们慢慢来实现关于js的继承。
多态性一个类实例中的相同方法和属性在不同场景有不同的表现形式。多态能够使具有不同内部结构的对象共享相同的外部接口。在java中的面向对象中的多态是建立在继承和重载的基础之上的,它能够创建具有多种形式的变量,函数或对象。它主要用途在于不同类型的对象响应相同名称的方法,字段或属性调用的能力,每个对象根据适当的类型特定行为进行响应。但是前端中ES语言本身就具有一种多态的特性,具体下文介绍。

面向对象的继承实现: https://zhuanlan.zhihu.com/p/184901347
面向对象编程

优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护
缺点:性能比面向过程低

面向过程编程

优点:性能比面向对象高,适合跟硬件联系很紧密的东西,例如单片机就采用的面向过程编程
缺点:没有面向对象易维护、易复用、易扩展

封装是面向对象思想中比较重要的一部分,js面向对象可以通过构造函数实现的封装
1.构造函数体现了面向对象的封装特性
2.构造函数实例创建的对象彼此独立、互不影响

简单对象

在这里插入图片描述

对象属性的增删改查

属性的增加

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
关于对象属性key调用及增加:
调用方法: obj.key obj[“key”]

var obj = {};
obj.1a = 1; //报错
obj['1a'] = 1 // {1a :1}
obj[1a] = 11 // 报错
obj[2] = 2 // {1a :1, 2 :2}
//查看
obj.1a //报错
obj.2 //2
obj['1a'] // 1
查看读取 obj.key obj[“key”]

在这里插入图片描述

document.write 与 console.log 差别:

在这里插入图片描述
在这里插入图片描述

修改

在这里插入图片描述

*删除

在这里插入图片描述

应用:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

对象的创建方法

在这里插入图片描述
3.var obj = Object.create(原型)——创建一个具有指定原型和属性的新对象,此方法提供了对对象继承的更多控制。
在这里插入图片描述

4.ES6中class类语法
5.构造函数构造实例对象方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

函数对象

// 构造实例的函数对象 => 构造函数
//=> ES - class
在这里插入图片描述

构造函数

理解:

构造函数就是一个普通的函数,创建方式和普通函数没有区别,不同的是构造函数习惯上首字母大写。另外就是调用方式的不同,普通函数是直接调用,而构造函数需要使用new关键字来调用。

命名:

在这里插入图片描述
构造函数自定义写法
在这里插入图片描述

car和car1彼此独立:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

构造函数的内部原理/new:

new之后:
1、创建一个新的对象(在函数体最前面隐式加上 var obj = Object.create(Student.prototype);
2、将构造函数的this指向这个新对象obj,并执行代码 this.xxx = xxx;
3、隐式返回这个新对象 this

构造函数里的this以及原型里的this对象最终指向的都是生成的实例,原因就是由new决定的

在这里插入图片描述

在这里插入图片描述

PS:没有new就是正常函数执行

在这里插入图片描述
模拟一个构造函数:(不这么用)
在这里插入图片描述
在这里插入图片描述
构造函数返回的就是对象,有new就不可能返回原始值

包装类

(原始值不能有属性和方法;只有对象有)
在这里插入图片描述

可使用new String(‘abcd’) / Object(‘abcd’)

在这里插入图片描述
处理后类型: object类型
在这里插入图片描述

在这里插入图片描述

原始值没有属性和方法。原始值操作属性
隐式处理如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
字符串对象有系统自带的length属性,(不可更改值)

可使用valueOf() 方法将包装类转倒换成基本类型:

在这里插入图片描述

补:Symbol()函数不能与new关键字一起作为构造函数使用,可借用Object()函数

在这里插入图片描述
如果想使用符号包装对象,可以借用Object()函数
在这里插入图片描述
在这里插入图片描述

练习:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注释:预编译 add会覆盖

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值