位置: 编程技术 - 正文

JavaScript中创建对象的模式汇总(JavaScript中创建文件)

编辑:rootadmin

推荐整理分享JavaScript中创建对象的模式汇总(JavaScript中创建文件),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:JavaScript中创建p段落,JavaScript中创建p段落,JavaScript中创建p段落,javascript怎么创建,JavaScript中创建数组,JavaScript中创建数组,javascript中创建对象的三种方法,JavaScript中创建数组,内容如对您有帮助,希望把文章链接给更多的朋友!

JavaScript中创建对象的模式汇总

**JavaScript创建对象模式:

对象字面量工厂模式构造函数模式原型模式结合构造函数和原型模式原型动态模式 **

面向对象的语言大都有一个类的概念,通过类可以创建多个具有相同方法和属性的对象。虽然从技术上讲,javascript是一门面向对象的语言,但是javascript没有类的概念,一切都是对象。任意一个对象都是某种引用类型的实例,都是通过已有的引用类型创建;引用类型可以是原生的,也可以是自定义的。

1、对象字面量

例子中创建一个名为person的对象,并为它添加了三个属性(name,age,job)和一个方法(sayName()),其中,sayName()方法用于显示this.name(被解析为person.name)的值。

对象字面量可以用来创建单个对象,但这个方法有个明显的缺点:使用同一个接口创建很多对象,会产生大量重复的代码。

2、工厂模式

工厂模式是软件工程领域中一种广为人知的设计模式,工厂模式抽象了创建具体对象的过程,用函数来封装以特定的接口创建对象的细节。

函数creatPerson{}能够根据接受的参数构建一个包含所有必要信息的Person对象。可以无数次的调用这个函数,每次都会返回一个包含三个属性一个方法的对象。

工厂模型虽然解决了创建多个相似对象的问题,却没有解决对象识别的问题(即怎么知道一个对象的类型)。

3、构造函数模式

与工厂模式不同的是

没有显示的创建对象

直接将属性和方法赋给了this对象

没有return语句

创建Person的新实例,必须使用new操作符。调用构造函数的4个步骤:

创建一个新对象

将构造函数的作用域赋给新对象(this指向了这个新对象)

执行构造函数中的代码

返回新对象

这个例子中创建的所有对象既是Object的实例,也是Person实例。可以通过instanceof操作符验证。

构造函数模式也有自己的问题,实际上,sayName方法在每个实例上都会被重新创建一次,需要注意的是,通过实例化创建的方法并不相等,以下代码可以证明

可以将方法移到构造器的外部作为全局函数来解决这个问题。

在全局下创建的全局函数实际上只能被经由Person创建的实例调用,这就有点名不副实了;如果对象需要定义很对方法,那么就要定义很多个全局函数,缺少封装性。

4、原型模式

JavaScript中创建的每个函数都有一个prototype(原型)属性,它是一个指针,指向一个对象,包含了可以由特定类型的所有实例共享的属性和方法(让所有的对象实例共享它的属性和方法)

以上代码做了这几件事情:

JavaScript中创建对象的模式汇总(JavaScript中创建文件)

定义了一个构造函数Person,Person函数自动获得一个prototype属性,该属性默认只包含一个指向Person的constructor属性通过Person.prototype添加三个属性,和一个方法

创建一个Person的实例,随后在实例上调用了sayName()方法

使用Person构造函数和Person.prototype创建实例的代码为例,展示个对象之间的关系

使用Person构造函数和Person.prototype创建实例的代码为例,展示个对象之间的关系

图中展示了Person构造函数、Person的原型属性以及Person的两个实例,之间的关系。Person.prototype指向了原型对象,Person.prototype.constructor有指回了Person。原型对象中除了包含constructor属性,还包含后来添加的其他属性和方法,Person的两个实例person1和person2都包含一个内部属性,该属性仅指向Person.prototype。

sayName()方法的调用过程:

在person1实例上查找logName()方法,发现没有这个方法,于是追溯到person1的原型

在person1的原型上查找sayame()方法,有这个方法,于是调用该方法

基于这样一个查找过程,我们可以通过在实例上定义原型中的同名属性,来阻止该实例访问原型上的同名属性,需要注意的是,这样做并不会删除原型上的同名属性,仅仅是阻止实例访问。

使用delete操作符可以完全删除实例属性

使用hasOwnProperty()方法可以检测一个属性是存在于实例还是原型中

下图展示了在不同情况下实例与原型之间的关系

简单的原型语法

在上面的代码中constructor属性不再指向Person了,通过constructor无法确定对象的类型了。可以像下面这样特意将他设置回适当的值

重设constructor属性会导致它的[[Enumerable]]特性被设置为true,默认情况,原生的constructor属性是不可枚举的,可以使用Object.defineProperty()方法来改变

原型中查找值的过程是一次搜索,原型对象所做的任何修改都能从实例上立即反应出来

person实例是在添加新方法之前创建的,但仍可以访问新添加的方法,原因是实例与原型之间的松散连接关系 重写原型对象后的情况

调用friend.sayName()时发生错误的原因是,friend指向的原型中不包含以该字段命名的属性,如下图。

原型对象的问题

原型对象省略了为构造函数传递初始化参数这一环节,所有势力在默认情况下都取得相同的属性值。原型模型最大的问题是有其共享本性所导致的。当原型模型包含引用类型的属性来说,问题就比较严重了。来看下面的例子。

5、组合使用构造函数模式和原型模式

组合使用构造函数模式和原型模式中,构造函数用于定义实例属性,原型模型用于定义方法和共享的属性。这样每个实例都会有自己的一份实例属性的副本,同时也可以共享对方法的引用,最大限度的节省了内存。

6、动态原型模式

原型动态模式将需要的所有信息都封装到构造函数中,通过if语句判断原型中的某个属性是否存在,若不存在(在第一次调用这个构造函数的时候),执行if语句内部的原型初始化代码。

推荐阅读:

js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)

以上所述是小编给大家介绍的JavaScript中创建对象的模式,希望对大家有所帮助!

一些实用性较高的js方法 本文分享下自己平时积累的一些实用性较高的js方法,供大家指点和评价。本想分篇介绍,发现有点画蛇添足。整理了下也没多少拿得出手的方法,自然

javascript html5摇一摇功能的实现 通过网上的资料,加上自己的整理,写了一份html摇一摇功能的简介,用做技术备份。知识要点1、DeviceMotionEvent这是html5支持的重力感应事件,关于文档

js点击返回跳转到指定页面实现过程 这个功能之前有简单的带过,这次详细的讲解下原理和存在的问题(由于是运用html5的新API所以有兼容问题,推荐移动端使用该方法)。功能描述:在浏

标签: JavaScript中创建文件

本文链接地址:https://www.jiuchutong.com/biancheng/373471.html 转载请保留说明!

上一篇:使用PHP+JavaScript将HTML页面转换为图片的实例分享(使用时间)

下一篇:一些实用性较高的js方法(一些实用性较高的东西)

  • 未取得发票的费用,在汇算清缴中按利润计算吗
  • 即征即退收入要交税吗
  • 如何确定一个企业在网络营销中的目标受众?
  • 农产品一般纳税人开普票免税吗
  • 会计软件每年都要付钱的吗
  • 企业收到生育津贴但不发给员工怎么办
  • 影响年初未分配利润的事项
  • 养老失业工伤单位一般缴纳多少钱
  • 施工企业暂估成本税前扣除
  • 银行承兑汇票收费
  • 税控盘费用抵减增值税
  • 集团企业涉税需求网络
  • 机票保险可以报销入账吗
  • 城市垃圾处置费计入会计什么科目
  • 电子发票怎么冲红字
  • 能抵扣税款的发票有哪些
  • 专票电话写错了怎么办
  • 办公室空调维修属于办公费吗
  • 在win7系统中安装win10
  • 苹果icloud储存空间怎么查看内容
  • PHP 中 Orientation 属性判断上传图片是否需要旋转
  • 潘塔纳尔湿地的成因
  • python中各种颜色
  • 用php做计算
  • 有关五险一金的知识
  • php 读取大excel
  • 利润分配的会计分录怎么写
  • thinkphp框架作用
  • 前端的基础知识
  • un删除
  • 微信转账怎么处理退回去
  • 盘点时发现存货怎么处理
  • 固定资产盘盈的账务处理
  • 变更法人需要什么流程
  • 资产超过5000万的家庭有多少
  • 个人所得税专项附加扣除赡养老人
  • 现金流量表的本期数是本月数还是本年数
  • 入伙和退伙的法律效力
  • SQL Server解析XML数据的方法详解
  • mysql_real_query
  • Table ‘xxx’ is marked as crashed and should be repaired 错误解决方法参考
  • 公司收到待报解预算收入在哪里查具体情况
  • 外贸出口企业的收入交增值税吗
  • 公司购买的公司用车
  • 受疫情影响较大的上市公司
  • 房地产开发企业建造的商品房,在出售前
  • 员工入股会计分录
  • 用友薪资管理怎么取消启用
  • 销售方开红字发票需要什么信息
  • 公司收不到的账款怎么办
  • 销售收入确认后怎么处理
  • 待摊费用取消了怎么做账
  • 劳务派遣期限是什么意思
  • 企业所有者权益在数量上等于
  • 免缴教育费附加什么意思
  • sql server 不存在或者拒绝访问
  • win8 恢复
  • Win10系统怎么删除管理员权限
  • Fedora Core 5.0 安装教程,菜鸟图文教程(linux text)
  • 电脑卡 硬盘100%
  • ubuntu屏幕突然变大
  • 运行方式包括什么方式
  • Ubuntu 8.10 Server Ruby 的安装方法
  • win8怎么调整显示器亮度
  • win8整理磁盘碎片的步骤
  • windows7 usb
  • 有没有免费的win10
  • win10系统预览版
  • unity绘制曲线
  • 高通ar芯片
  • 备份文件并上传到网盘
  • [置顶]bilinovel
  • javascript怎么学
  • 详解九章算法
  • js实现网页收藏的方法
  • javascript 类型
  • 消费税税收优惠的纳税筹划
  • 合肥新房商铺
  • 河南省优秀班主任2022
  • 江苏省国家税务局总局官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设