位置: 编程技术 - 正文

JS创建对象几种不同方法详解(js创建对象的三种方式)

编辑:rootadmin

推荐整理分享JS创建对象几种不同方法详解(js创建对象的三种方式),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:js创建对象的方式有哪些,js创建对象有几种方式,js创建对象几种方式,js创建对象有几种方式,js创建对象的两种方法以及区别,js创建对象有几种方法,js创建对象有几种方式,js创建对象几种方式,内容如对您有帮助,希望把文章链接给更多的朋友!

本文介绍了几种js创建对象的方法,分享给大家供大家参考,具体内容如下

1、工厂模式

弊端:没有解决对象的识别问题,即怎么知道一个对象的类型。

2、构造函数模式

与工厂模式相比: 1、没有显式的创建对象 2、直接将属性和方法赋给了this对象 3、没有return语句 要创建person的实例,必须使用new操作符,以这种方式调用构造函数实际上会经历4个步骤: 1、创建一个新对象 2、将构造函数的作用域赋给新对象 3、执行构造函数中的代码 4、返回新对象 创建自定义的构造函数可以将它的实例标识为一种特定的类型。 构造函数的缺点: 每个方法都有在每个实例上重新创建一遍。person1和person2都有一个sayName()的方法,但两个方法不是同一个Function实例。不同实例上的同名函数是不相等的。 创建两个完成同样任务的Function实例没有必要,而且还有this对象在,不需要在执行代码前就把函数绑定在特定对象上,可以像下面这样。

把sayName属性设置成全局的sayName函数,这样,由于sayName包含的是一个指向函数的指针,因此person1和person2对象就共享了同一个函数。 但是,如果对象需要定义很多方法,那么就要定义很多全局函数,自定义的引用类型也没有封装可言了。为了解决上述问题,引入原型模式。

3、原型模式

理解原型对象 我们创建的每个函数都有一个prototype属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。prototype是通过调用构造函数而创建的那个对象实例的对象原型,使用原型对象的好处是可以让所有对象实例共享它所包含的属性和方法。

首先,解析器会问实例person1是否有name属性,如果有,就返回。 如果没有,就继续去person1的原型中搜索name属性,如果有就返回。 如果没有,再继续向person1的原型的原型中搜索。

JS创建对象几种不同方法详解(js创建对象的三种方式)

isPrototypeOf()确定实例和原型对象之间的关联 console.log(Person.prototype.isPrototypeOf(person1)); //true Object.getPrototypeOf()返回的是[[prototype]]的值 console.log(Object.getPrototypeOf(person1)); //Person {name: “Yvette”, age: , job: “engineer”} 返回的是Person的原型对象。 console.log(Object.getPrototypeOf(person1) === Person.prototype)//true console.log(Object.getPrototypeOf(person1).name);//”Yvette” hasOwnProperty()方法可以检测一个属性是存在于实例中,还是存在于原型中,只有给定属性存在于实例中,才会返回true。 console.log(person1.hasOwnProperty(“name”));//false 原型与in操作符 有两种方式使用in操作符:单独使用和在for-in循环中使用。单独使用时,in操作符会在通过对象能够访问给定属性时返回true,无论该属性在于实例中还是原型中。 使用for in循环,返回的是所有能够通过对象访问的、可枚举的属性,其中既包括实例中的属性,也包括存在于原型中的属性。如果实例中的属性屏蔽了原型中不可枚举的属性,那么也会返回。IE9之前的版本实现上有一个Bug,屏蔽不可枚举属性的实例属性不会在for-in中返回。

在IE9之前的吧按本中没有log信息。尽管person实例中的toString()方法屏蔽了原型中的不可 枚举的toString(); 原型简写

这导致了person1.constructor不再指向Person,而是指向了Object。如果constructor很重要,则需要特意将其设为适当的值,如:

但是这种方式会导致constructor属性变成可枚举。 如果想设置为不可枚举的(默认不可枚举),可以使用Object.defineProperty(Person.prototype, “constructor”, { enumerable: false, value: Person }); 原型的动态性 由于在原型中查找值的过程是一次搜索,因此我们对原型对象所做的任何修改都能够立即从实例上反映出来。 如果重写整个原型对象,情况就不一样了。调用构造函数时会为实例添加一个指向最初原型的[[prototype]]指针,而把原型修改为另外一个对象就等于切断了构造函数与最初原型之间的联系。实例中的指针仅指向原型,而不指向构造函数。

person.prototype指向的是原本的原型对象,而不会指向新的原型对象。 原型对象的问题 原型模式最大问题是由其共享的本性所导致的。 对于包含引用类型值的属性来说,问题较为突出

本意只想修改person1的friends,但是却导致person2的friends属性值也改变了。因此我们很少单独使用原型模式。

4、组合使用构造模式和原型模式

创建自定义类型的最常用的方式,就是组合使用构造函数模式与原型模式。构造函数模式用于定义实例属性,原型模式用于定义方法和共享的属性,这样每个实例都有自己的一份实例属性的副本,又同时共享着对方法的引用,最大限度的节省了内存。

除了以上几种方式以外,另外还有动态原型模式,寄生构造模式和稳妥构造模式,但是鉴于使用频率较低,不再赘述。

原生javascript实现解析XML文档与字符串 之前写过一篇《使用jquery解析XML的方法》链接是

JavaScript Array对象详解 本文介绍了Js的Array数组对象,具体内容如下目录1.介绍:介绍Array数组对象的说明、定义方式以及属性。2.实例方法:介绍Array对象的实例方法:concat、ev

JavaScript常用函数工具集:lao-utils 在工作中经常会频繁使用一些方法、或做类型判断、数据转换等,为了方便,将一些功能封装成函数整理成工具集lao-utils使用Node.jsnpminstalllao-utils--saveAMD

标签: js创建对象的三种方式

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

上一篇:基于JavaScript实现文字超出部分隐藏(基于javascript的毕业设计)

下一篇:原生javascript实现解析XML文档与字符串(js原生dialog)

  • 应补退税额较少是什么意思
  • 房产税纳税义务人
  • 什么是税务登记管理
  • 一般纳税人劳务费税率是多少
  • 跨月如何开具增值税发票
  • 资本公积转增资本的限制条件
  • 出口退税自查中的“四自三不见”是指什么
  • 房屋契税是按照发票上的不含税价格交吗
  • 企业赞助学校发言稿
  • 购买原材料产生的运输费计入什么科目
  • 去年税收滞纳金计入什么科目
  • 网银年费属于财务费用哪一项
  • 短期借款占负债比例大
  • 其他应收款属于流动资产吗
  • 酒店客房主营业务支出明细表怎么写
  • 土地使用税级别划分标准
  • 个税起征点是多少啊
  • 增值税扣税凭证包括增值税专用发票
  • 销售费用核算原则
  • 银行财务软件用什么
  • 个体工商户的专票可以抵扣吗
  • 现金股利属于什么所得
  • 公司破产清算的清偿顺序为
  • win10锁屏界面windows聚焦什么意思
  • 不附追索权的票据包括
  • linux 判断语句
  • win10系统日志在哪个文件夹
  • 羊毛衫变形了还能变回来吗
  • 公积金贷款额度查询计算器
  • 宏基笔记本一键恢复系统
  • 资产负债表怎么算资产负债率
  • php怎么爬数据
  • 应收票据影响现金流吗
  • 小规模纳税人和一般纳税人的区别
  • php引用文件的方法
  • js中写php代码
  • viwer.js
  • 【综述】分子预训练模型综述
  • npm ERR! notarget No matching version found for xxx@^1.0.64. npm 插件安装失败
  • 国际货运代理公司有哪些?
  • python,array
  • 应付票据是供应商往来吗
  • 不动产租赁专票对房产有无影响
  • 长期股权投资的交易费用计入哪里
  • 小规模纳税人季度不超30万免增值税
  • 个人所得税专项扣除2023最新政策
  • 企业所得税视同销售的会计处理是?
  • 不交社保的职业
  • 融资租赁和经营租赁的会计处理
  • 企业获得小微企业补贴
  • 个体工商户和小规模纳税人的区别
  • 承租人对融资租赁业务进行会计处理的方法有( )
  • 研发费用资本化条件
  • 税收奖励账务处理
  • 支付给职工以及为职工支付的现金增加
  • MySQL数据库中把表中的一个字段重命名
  • win7开机启动
  • freebsd中文手册
  • freebsd怎么安装软件
  • freebsd中文手册
  • ubuntu虚拟机与windows共享文件
  • ubuntu写脚本
  • WinXp x64sp企业订户最新完整纯净版安装指南
  • centos新加硬盘
  • kb4592449-windows安全每月质量汇总
  • android xui
  • python 进程间通讯
  • cocos2d怎么用
  • vue mint-ui 官网
  • 新版unity
  • js正则表达式变量
  • activity启动原理
  • 考察后多久公示公务员
  • 社保欠费税务催缴
  • 怎么查行业代码是多少
  • 河北华盛税务师事务所
  • 江苏电子税务局客服电话
  • 企业所得税预缴时间规定
  • 自然人电子税务局
  • 环保职责及管理范围
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设