位置: 编程技术 - 正文

javascript 的面向对象特性参考(javascript面向对象编程指南)

编辑:rootadmin

javascript 的面向对象特性参考。 这是我学习javascript中面向对象特性的一点总结。希望对具有其他语言的面向对象设计经验的朋友理解javascript的OO有所帮助。我具有c++,java和python的面向对象设计的经验。 总的感受, javascript作为一种弱类型的动态语言,语法解决于java,但其面向对象的方式更和python相识。 1 面向对象的特性 类,成员变量,成员函数,类变量,类方法,继承,多态 1) 类 类的定义:function Circle(r) { this.r = r; } 类的实例化: c = Circle(3); 2)成员变量 成员变量在初始化函数里申明:this.r = r; 注意,在对象生成后,你也可以给它附上成员变量,比如c.name="my circle", 但是除非特别的需要,我强烈建议你不要这样做。也就是所有的成员都应在初始化函数里声明。我认为这是一种好的style。 这一点和python很相识。 3)成员函数 成员函数的标准形式是这样的: Cricle.prototype.area = function() { return 3. * this.r * this.r; } 这和java或python或c++都大不一样。但为了帮助理解,你可以把prototype看作基类。 prototype里面的变量或方法,是所有对象共享的。 比如,c.area()调用最终就会让解释器调用到Circle.prototype.area(). 相比于java和c++,javascript具有他们都没有的一个语义,也就是你可以在prototype里定义变量。定义在prototype里的变量可以被所有的实例共享量。所以一般它应该是一个常数,比如:Circle.prototype.PI = 3.. 显然,prototype里的变量和方法都应该是不变的。每一个对象实例都不应该取修改prototype中的内容。虽然语言允许你可以这样做,但这样做没有任何意义,也违反了面向对象的语义(想想,java会让你动态修改一个类的方法吗)。 当然,对于多态是另外一回事,在后面详述。 而且,我建议所有的成员函数都在紧接类定义的地方定义。而不应该在代码运行的某个地方对一个对象实例增加/修改成员函数。这样的结果是javascript的类定义尽量向java看齐。使得代码更清晰。 4)类变量 类变量是属于一个类的变量。就像java里用static修饰的变量。因为它属于类,所以它也应该是一个常量。实例不应该去修改它,虽然你可以(java里可以用final修饰,使得类变量一旦定义,就不能修改)。 这里可以看到,类变量和prototype里定义的变量的功能是相似的。确实如此,他们的目的都是一样的。但他们的访问方式 不一样。比如: Circle.prototype.PI = 3.; Circle.PI = 3.; //用prototype里的变量 Circle.prototype.area1 = function() { return this.PI * this.r * this.r; } //用类变量 Circle.prototype.area2 = function() { return Circle.PI * this.r * this.r; } 5)类方法 这个概念应该很简单。注意类方法里绝对不要用this关键字,和java完全一样。 Circle.max = function(a, b) { return a.r > b.r ? a : b; } theMax = Circle(new Circle(1), new Circle(4)); 6)继承 子类继承父类,那么 “子类实例” 具有和 “父类实例” 完全一样的行为。javascript是这样实现的。 function SubCircle(x, y, r) { this.x = x; this.y = y; this.r =r; } SubCircle.prototype = new Circle(0); 记得前面说的吗?可以把prototype看作一个基类。这里,prototype确确实实是一个基类。它是如何实现的呢? 举例如下:sc = SubCirlce(1,1,3); sc.area(); 调用的传递: sc.area()->sc.prototype.area()->Circle(0).area()->Circle.prototype.area().看来是不是很奇妙呢。 通过这种方式,javascript实现了继承。 7)多态 多态是子类会定义和父类具有相同signature的方法。假设在SubCircle所在的空间PI=,而面积公式也变为 PI*R*R*R。 SubCircle.prototype.PI = SubCircle.prototype.area = function() { return this.PI*this.r*this.r*this.r; } Sc.area() 这样的操作可以认为是: Sc.PI->sc.prototype.PI->Cricle(0).PI = Sc.area()->sc.prototype.area()->Circle(0).area. 这个时候,调用过程是这样的 sc.area()->sc.prototype.area(),在这里解释器发现了area这个方法,于是它就调用此方法。 而Cricle.prototype.area就永远也不会被调用。PI的调用也是如此。 那么子类如何想调用父类的方法应怎么办呢?好像没有什么办法哦,谁知道可以告诉我。但面向对象的理论告诉我们,继承主要是提供接口而不是代码复用,所以还是少有这样的念头为好 :)。 下面是一个例子程序。包含上面的所有的概念。 [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

推荐整理分享javascript 的面向对象特性参考(javascript面向对象编程指南),希望有所帮助,仅作参考,欢迎阅读内容。

javascript 的面向对象特性参考(javascript面向对象编程指南)

文章相关热门搜索词:js面向对象的三大特性,javascript语言的面向对象的特性主要表现在哪些方面?,javascript面向过程,js面向对象的三大特性,javascript的面向对象,javascript面向对象编程指南,javascript面向过程,javascript面向对象编程指南,内容如对您有帮助,希望把文章链接给更多的朋友!

javascript引用对象的方法 aid="link1"name="link1"href="

新手入门常用代码集锦 本贴主要是收集各种比较入门的代码层的隐藏与显示只要设置style的display属性即可比如divstyle="display:none"id="MyDiv"隐藏的层/div如果要显示它可以通过脚本

window.showModalDialog使用手册 作者:norika整理日期:年6月日基本介绍:showModalDialog()(IE4+支持)showModelessDialog()(IE5+支持)window.showModalDialog()方法用来创建一个显示HTML内容的模态对

标签: javascript面向对象编程指南

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

上一篇:javascript基础的动画教程,直观易懂(javascript基本概念)

下一篇:javascript引用对象的方法(javascript引用值)

  • 增值税税控系统技术维护费怎么做账
  • 无形资产175加计扣除会计如何处理
  • 工资用现金发放有风险吗?
  • 红字发票信息表盖章位置图片
  • 自然人税收管理系统扣缴客户端
  • 无票收入应该怎么做
  • 制造企业需要设哪些部门
  • 公司为其他企业提供担保,担保对象可以是公司股东吗
  • 银行汇票多余金额会计分录
  • 物业公司收到开发代付物业管理费怎么做账
  • 互联网合同范本
  • 营改增建筑业税率是多少
  • 税控盘未上传发票查询
  • 教育培训机构涉税问题
  • 产品质量认证的基本条件有哪些
  • 小规模企业转为一般纳税人怎么做会计分录
  • 费用报销单的日期
  • 本期金额怎么计算
  • 购买现金支票的扣费方式
  • windows 10鼠标如何操作
  • 调整bios配置设置
  • js监听地址栏
  • 物流公司的财务能学到东西吗
  • 开红字专用发票记账时摘要怎样写?
  • 房地产预售阶段怎么开具发票
  • 喜加一平台
  • 关联企业之间销售货物
  • 混合销售账务处理办法
  • 库存现金盘亏会计分录原因待查
  • 工程结算和决算一样吗
  • php r
  • 收到违约金如何入账
  • php如何实现伪静态
  • yolov5输出result
  • 个人出租商用房个人所得税
  • 太原市插画工作室
  • 建筑企业增值税收入确认时间
  • 个人以不动产投资成立一人有限公司
  • 有没有网上学电脑的
  • 固定资产的会计政策有哪些
  • sql server基本
  • 合同可以盖财务章子吗
  • 企业之间利息收入开票吗
  • 所得税申报的资产总额是哪里的数据
  • 现金日记账的登记证据有
  • 税控盘忘记抄报税怎么办
  • 公司向个人租赁房屋办公要交税吗?
  • 房地产开发土地使用税如何计算
  • 固定资产计提完折旧报废的账务处理
  • 本期盈余为负数怎么调整
  • 消耗性生物资产与生产性生物资产的区别
  • 分公司账务处理需要注意哪些
  • sql储存过程
  • mysql数据库使用教程
  • mac系统的控制面板在哪
  • windows server 2016 百度网盘下载
  • 驱动安装过程中发生错误
  • rsrcmtr.exe - rsrcmtr是什么进程 有什么用
  • ps是什么文件
  • js字符串includes
  • js修改css样式属性不生效
  • 定制家具加盟品牌
  • 关于国内邮政汇兑冻结下列说法正确的有
  • 批处理 dir
  • 不得不佩服自己的搞笑说说
  • perl有什么用
  • 在下次启动计算机时会自动关机。重起后恢复正常(“绿色版”)
  • react jss
  • js的a标签
  • jquery左右选择框
  • node的express
  • UNITY gameobject代码中setacvtive(false)与面板中直接去掉勾 效果不一样
  • 二级联动什么意思
  • jquery.css
  • js设置图片大小
  • 电子税务局驱动安装步骤
  • 江苏国税电子税务局开票流程
  • 税务登记表格怎么填写
  • 购销合同印花税最新政策2023
  • 重庆市大足区迪涛中学那几个是尖子班
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设