位置: 编程技术 - 正文

JavaScript定义类或函数的几种方式小结(javascript定义数组的方法)

编辑:rootadmin
提起面向对象我们就能想到类,对象,封装,继承,多态。在《javaScript高级程序设计》(人民邮电出版社,曹力、张欣译。英文名字是:Professional JavaScript for Web Developers)这本书中描述的还算比较详细。我们看看JavaScript中定义类的各种方法。 1.工厂方式 javaScript中创建自己的类和对象,我们应该是必须掌握的,我们都知道javaScript中对象的属性可以在对象创建后动态定义,比如下面的代码: 我们很容易使用oCar对象,但是我们创就是想创建多个Car实例。我们可以使用一个函数来封装上面的代码来实现:<script type="text/javascript"> 顺便说一下,javaScript对象默认成员属性都是public 的。这种方式我们称为工厂方式,我们创造了能创建并返回特定类型的对象的工厂。 这样做有点意思了,但是在面向对象中我们经常使用创建对象的方法是: Car car=new Car(); 使用new 关键字已经深入人心,因此我们使用上面的方法去定义总感觉别扭,并且每次调用时都去创建新的属性以及函数,功能上也不实际。下来我们看看构造函数的形式定义类。 2.构造函数 这种方式看起来有点象工厂函数。具体表现如下: 看起来效果很明显,有差别了吧。感觉有点意思了。在构造函数内部创造对象使用this 关键字,使用new 运算符创建对象感觉非常亲切。但是也有点问题:每次new 对象时都会创建所有的属性,包括函数的创建,也就是说多个对象完全独立,我们定义类的目的就是为了共享方法以及数据,但是car1对象与car2对象都是各自独立的属性与函数,最起码我们应该共享方法。这就是原形方式的优势所在。 3.原型方式 利用对象的prototype属性,可把它看出创建新对象所依赖的原型。方法如下: 首先这段代码的构造函数,其中没有任何代码,接下来通过对象的prototype属性添加属性定义Car对象的属性。这种方法很好,但是问题是Car的对象指向的是Array指针,Car的两个对象都指向同一个Array数组,其中一个对象car1改变属性对象的引用(数组Array)时,另一个对象car2也同时改变,这是不允许的。 同时该问题也表现在原型不能带任何初始化参数,导致构造函数无法正常初始化。这需要另一种方式来解决:那就是混合的构造函数/原型模式。 4. 混合的构造函数/原型模式 联合使用构造函数和原型方式,定义类就非常方便。 该方法是把属性放在内部定义,把方法放在外边利用prototype进行定义。解决了第三种方法的问题。 这种方法其实应该来说非常友好了,但是比起java的语法来,应该有一些不和谐,感觉比较凌乱,对C++来说,我们就没有那么麻烦的感觉了,可是开发C++的研发人员一般情况下很少涉及javaScript,而对J2EE的研发人员来说,这种方式总有一些别扭。总感觉不是友好的封装,其实只不过是视觉上封装效果不是很好而已,要想达到视觉封装效果而又能达到这种方法的效果的也可以以,个人认为其实比较麻烦。那就是动态原型法。 5.动态原型 对于习惯使用其他语言的开发者来说,使用混合的构造函数/原型方式感觉不那么和谐。毕竟,定义类时,大多数面向对象语言都对属性和方法进行了视觉上的封装。考虑下面的C#类: C#很好的打包了Car类的所有属性和方法,因此看见这段代码就知道它要实现什么功能,它定义了一个对象的信息。批评混合的构造函数/原型方式的人认为,在构造函数内存找属性,在其外部找方法的做法不合逻辑。因此,他们设计了动态原型方法,以提供更友好的编码风格。 动态原型方法的基本想法与混合的构造函数/原型方式相同,即在构造函数内定义非函数属性,而函数属性则利用原型属性定义。唯一的区别是赋予对象方法的位置。下面是用动态原型方法重写的Car类: 直到检查typeof Car._initialized是否等于"undefined"之前,这个构造函数都未发生变化。这行代码是动态原型方法中最重要的部分。如果这个值未定义,构造函数将用原型方式继续定义对象的方法,然后把Car._initialized设置为true。如果这个值定义了(它的值为true时,typeof的值为Boolean),那么就不再创建该方法。简而言之,该方法使用标志(_initialized)来判断是否已给原型赋予了任何方法。该方法只创建并赋值一次,为取悦传统的OOP开发者,这段代码看起来更像其他语言中的类定义了。 6 混合工厂方式 这种方式通常是在不能应用前一种方式时的变通方法。它的目的是创建假构造函数,只返回另一种对象的新实例。这段代码看来与工厂函数非常相似: 与经典方式不同,这种方式使用new运算符,使它看起来像真正的构造函数: var oCar = new Car(); 由于在Car()构造函数内部调用了new运算符,所以将忽略第二个new运算符(位于构造函数之外)。在构造函数内部创建的对象被传递回变量var。这种方式在对象方法的内部管理方面与经典方式有着相同的问题。强烈建议:除非万不得已(请参阅第章),还是避免使用这种方式。 总结:(采用哪种方式) 目前使用最广泛的是混合的构造函数/原型方式。此外,动态原型方法也很流行,在功能上与构造函数/原型方式等价。可以采用这两种方式中的任何一种。不过不要单独使用经典的构造函数或原型方式,因为这样会给代码引入问题。

推荐整理分享JavaScript定义类或函数的几种方式小结(javascript定义数组的方法),希望有所帮助,仅作参考,欢迎阅读内容。

JavaScript定义类或函数的几种方式小结(javascript定义数组的方法)

文章相关热门搜索词:js定义类的三种方法,javascript定义类型,javascript定义类型,js定义类的三种方法,js定义类的三种方法,javascript定义函数的方法,js定义类的三种方法,javascript 定义类,内容如对您有帮助,希望把文章链接给更多的朋友!

javascript中的对象创建 实例附注释 javascript中的对象创建声明:varobj={};或者varobj=newObject();为对象加入属性,方法://=====第一种写法====================================obj.name='小明';//为对象加属

javascript面向对象之一 定义类 javascript中的类是用函数function表示的,如下:functionStudent(){//定义类Student中的字段,并赋予初值,但此字段的访问权限是publicthis.studentNo='s';this.studentN

javascript面向对象之二 命名空间 最简单创建命名空间的方法:varjava={};java.util={};//这样就创建成功了命名空间:java.util//我们可以在java.util下面加类(函数),属性,或对象java.util.HashMap=func

标签: javascript定义数组的方法

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

上一篇:js对象的构造和继承实现代码(js对象的常用方法)

下一篇:javascript中的对象创建 实例附注释(js对象用法)

  • 一般纳税人的计税方式是什么
  • 私车公用如何避税
  • 累计折旧科目一直有余额吗
  • 转租价格由谁决定
  • 财务费用和应付利息怎么算
  • 结转代扣社会保险费分录
  • 季报企业所税缴税了,但年报是亏损的
  • 错误的累计折旧结转会计分录如何调整
  • 特许权使用费增值税征收品目
  • 离退休人员的返乡政策
  • 固定资产本期折旧额与上期不一样
  • 如果增值税发票丢了好的怎么办有谁交罚熬一
  • 所有者权益的利得和损失
  • 税务编码如何快速查询
  • 企业所得税季报营业收入,营业成本怎么填
  • 开外经证预缴税款金额需要自己计算吗?建筑行业
  • 一般纳税人房租没有发票怎么办
  • 管家婆怎样查历史记录
  • 残疾人保障金中上年在职职工人数怎么计算
  • 破产清算重整和解
  • 房地产企业人防设备计入什么科目
  • 补发住房补贴征求意见
  • 预收账款可以计入
  • 上个月多计提的工资怎么调整
  • linux 列表
  • 房地产开发企业资质证书
  • win10锁屏壁纸自动更新
  • linux系统中如何查看日志
  • 销售费用里面的支付的安装人工费汇算清缴时计入哪里
  • php_fileinfo作用
  • 库存现金日记账的登记依据
  • php 查找数组元素
  • 报个税时显示扣缴单位无有效的税费种认定信息
  • 服务业增值税加计扣除账务处理
  • 怎么用ai做vi
  • tls版本过低怎么办
  • javascript获取数组索引
  • ps橡皮擦不是圆圈了
  • 汽油增值税专用发票几个点
  • 出口退税进项税额转出怎么申报
  • 本期应补退税额和期末未缴税额
  • 公司赠送客户的产品怎么核算
  • 设备折旧费怎么使用
  • 中小企业估值
  • 个人所得税可以取出来用吗
  • 发票金额 含税
  • 小规模差额征税可以开专票吗
  • mysql log
  • 留抵进项税太多怎么办
  • 补贴收入是否缴纳个税
  • 筹建期间的开办费为什么不属于资产
  • 委托加工物资账务
  • 可供出售金融资产属于什么科目
  • MSSQL 2008 自动备份数据库的设置方法
  • 办理税务登记需要多久
  • 对存在标的资产的亏损合同,企业应首先对标的资产
  • 协定存款是什么存款
  • 旅客运送的一般规定
  • 所有者权益的确认依赖于资产和负债的确认
  • 股东借款可以直接转为实缴出资吗
  • 小规模公司购买成本票严重吗
  • 预付卡发票如何做分录
  • 企业预交所得税税率
  • 委托设置什么意思
  • 银行本票具体操作流程
  • 在mysql中使用什么语句来查询数据
  • Windows Server 2008下共享资源访问走捷径
  • windows下用什么编程工具
  • centos编译器
  • explore.exe是什么意思
  • window8输入法怎么设置
  • linux用什么版本
  • 折腾linux 没意义
  • js canvas绘制图片
  • nodemcu连接阿里云
  • Python如何判断数据类型
  • 票种核定和税种核定的区别
  • 德清社保局固定电话多少
  • 广东省广州市国资委
  • 辽宁房产税征收标准
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设