当前位置: 首页 > news >正文

JavaScript进阶——04-创建对象和继承

创建对象的几种方式

通过Object

 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>01_Object构造函数模式</title></head><body><!--方式一: Object构造函数模式* 套路: 先创建空Object对象, 再动态添加属性/方法* 适用场景: 起始时不确定对象内部数据* 问题: 语句太多--><script type="text/javascript">/*一个人: name:"Tom", age: 12*/// 先创建空Object对象var p = new Object()p = {} //此时内部数据是不确定的// 再动态添加属性/方法p.name = 'Tom'p.age = 12p.setName = function (name) {this.name = name}​//测试console.log(p.name, p.age)p.setName('Bob')console.log(p.name, p.age)​​</script></body></html>​

方式二:对象字面量

 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>02_对象字面量</title></head><body><!--方式二: 对象字面量模式* 套路: 使用{}创建对象, 同时指定属性/方法* 适用场景: 起始时对象内部数据是确定的* 问题: 如果创建多个对象, 有重复代码--><script type="text/javascript">var p = {name: 'Tom',age: 12,setName: function (name) {this.name = name}}​//测试console.log(p.name, p.age)p.setName('JACK')console.log(p.name, p.age)​var p2 = {  //如果创建多个对象代码很重复name: 'Bob',age: 13,setName: function (name) {this.name = name}}​</script></body></html>

方式三:工厂模式

  • 方式:通过工厂函数动态创建对象并返回。

返回一个对象的函数,就是工厂函数

  • 适用场景: 需要创建多个对象。

  • 问题: 对象没有一个具体的类型,都是Object类型。

由于这个问题的存在,工厂模式用得不多。

 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>03_工厂模式</title></head><body><!--方式三: 工厂模式* 套路: 通过工厂函数动态创建对象并返回* 适用场景: 需要创建多个对象* 问题: 对象没有一个具体的类型, 都是Object类型--><script type="text/javascript">function createPerson(name, age) { //返回一个对象的函数===>工厂函数var obj = {name: name,age: age,setName: function (name) {this.name = name}}​return obj}​// 创建2个人var p1 = createPerson('Tom', 12)var p2 = createPerson('Bob', 13)​// p1/p2是Object类型​function createStudent(name, price) {var obj = {name: name,price: price}return obj}​var s = createStudent('张三', 12000)// s也是Object​​</script></body></html>​

方式四:自定义构造函数

 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>04_自定义构造函数模式</title></head>​<body><!--方式四: 自定义构造函数模式* 套路: 自定义构造函数, 通过new创建对象* 适用场景: 需要创建多个类型确定的对象* 问题: 每个对象都有相同的数据, 浪费内存--><script type="text/javascript">//定义类型function Person(name, age) {this.name = namethis.age = agethis.setName = function (name) {this.name = name}}​var p1 = new Person('Tom', 12)p1.setName('Jack')console.log(p1.name, p1.age)console.log(p1 instanceof Person)​function Student(name, price) {this.name = namethis.price = price}​var s = new Student('Bob', 13000)console.log(s instanceof Student)​var p2 = new Person('JACK', 23)console.log(p1, p2)​​</script></body></html>​

方式四引入了继承。

继承的几种方式

通过构造函数继承

在子类型构造函数中通用call()调用父类型构造函数

原型链继承

子类型的原型为父类型的一个实例对象

组合继承

希望各位可以点个赞点个关注,这对up真的很重要,谢谢大家啦!

http://www.lryc.cn/news/347494.html

相关文章:

  • 队列(详解)
  • 【原创】nnUnet V1在win11下的安装与配置
  • C语言之指针初阶
  • 异常检测的学习和实战
  • RabbitMQ 面试题(一)
  • org.postgresql.util.PSQLException: 错误: 关系 “dual“ 不存在
  • mysql权限分类
  • 【C++11】列表初始化、右值引用的详细讲解(上)
  • 【JAVA进阶篇教学】第十三篇:Java中volatile关键字讲解
  • 蓝桥杯-地宫取宝
  • 带头单链表 C++实现
  • 学习c#第24天 枚举类型
  • TensorFlow运行bug汇总
  • docker部署调度程序
  • websocket和http协议的区别
  • CSS之定位
  • [IM002][Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序
  • 神经网络复习--神经网络算法模型及BP算法
  • 【Java】/*方法的使用-快速总结*/
  • kotlin中协程相关
  • (自适应手机端)物流运输快递仓储网站模板 - 带三级栏目
  • Navicat导出表结构到Excel或Word
  • Golang编译优化——稀疏条件常量传播
  • 人工智能培训讲师咨询叶梓介绍及智能医疗技术与ChatGPT临床应用三日深度培训提纲
  • HCIP(BGP综合实验)--8
  • 深入理解C++中的Vector容器:用容器构建高效程序
  • 目标检测YOLO实战应用案例100讲-基于深度学习的交通场景多尺度目标检测算法研究与应用(下)
  • react 类组件 和 函数组件 声明周期 对比
  • 智慧变电站守护者:TSINGSEE青犀AI视频智能管理系统引领行业革新
  • 【Ubuntu20.04安装java-8-openjdk】