位置: 编程技术 - 正文

javascript 面向对象编程 function也是类(javascript面向对象精要pdf)

编辑:rootadmin
但javascript中并没有类概念,所谓的类也是模拟而来,通过函数加闭包模拟出类成员及私有成员(关于闭包可以参见跨越边界: 闭包)。这里我们将用比较平实的方式来了解一下javascript中的”类”,避开一些生硬的原理。

既然是用function来模拟类,所以编写代码创建类的关键字还是function。我们创建一个座标点类。

function Point() { this.X = 0; this.Y = 0; }; var zeroPoint = new Point(); alert("当前座标值( X:" + zeroPoint.X + " , Y:" + zeroPoint.Y + " )");

大家都知道非静态类成员的访问需要通过对象来完成,所以先new出了一个Point类型对象,再通过该对象完成X和Y轴座标值的访问。从语法上来说,javascript类对象的创建过程和C#等差不多,但实现机制却不相同。这里的new创建出了一个Object,后续的Point()函数执行时将其this指向了这个新的Object对象。Point中的this.X和this.Y是Point类的两个公共成员,所以Point的对象可以直接对它们进行访问。

说到类成员或对象的成员,免不了要提到可访问性的问题。在javascript的类中,也有public成员和private成员之分,但究其细节却不尽相同。javascript私有成员也是些在类外部不可以通过对象进行操作的成员,其实在类的内部成员之间私有成员也不定能被访问。在类的内部一般只有私有成员和私有成员之间可以互相的访问,你可以认为其它成员权限不够不能操作这些隐私的东西,但如果你有特权,那就不一样了,管它私有公开照用不误。私有成员变量和普通变量声明一样,用var关键字,私有方法可以用var声明变量来接收方法对象,也可以像普通方法那样去构建。

function Lady() { var age = ; var name = "菜花"; var think = function() { alert("其实我今年" + age + "岁。"); }; function fancy(){ alert("幻想变成岁。"); }; this.Introduce = function() { alert("我叫" + name + " , 今年岁。"); }; }; var younglady = new Lady(); alert(younglady.age);//结果undefined younglady.think(); //不支持 younglady.fancy(); //不支持

上面是一个Lady类,age、think、fancy都是私有成员,think和fancy方法可以访问age和name,think和fancy两个方法也可以互相进行调用。但它们是私有的,所以创建出来的youngLady对象并不能调用到age、think和fancy,当然也不能调用到name。如果私有成员只能互相之间调用,其实也就失去了私有成员存在的意义。javascript提供特权成员可以建立外界和私有成员互通的桥梁。特权成员是公共成员的一种,公共成员有普通公共成员、特权成员和对象公共成员。

特权成员就是在类中用this.XX的方式建立的成员,它们可以通过对象来被调用,它们也可以访问私有成员,可以建立私有成员被访问的通道。

function Lady() { var age = ; this.Name = "菜花"; var think = function() { alert("其实我今年" + age + "岁。"); }; function fancy() { alert("幻想变成岁。"); }; this.Introduce = function() { alert("我叫" + this.Name + " , 今年" + age + "岁。"); }; }; var younglady = new Lady(); younglady.Introduce(); //Introduce

普通公共成员的创建,不在类的里面来编码,而是通过类的prototype来创建。添加普通公共成员都直接添加到类的prototype中,而prototype就是一个像JSON对象一样的成员集对象。当我们进行对象创建时,可以认为会将类prototype中的成员整体copy入新的Object对象中。

var younglady = new Lady(); younglady.Introduce(); //Introduce Lady.prototype.Hobby = "上网"; Lady.prototype.GetName = function() { return this.Name; }; var lady2 = new Lady(); alert(lady2.GetName()); alert(lady2.Hobby);

上面代码通过prototype为Lady类添加了普通公共成员GetName方法和Hobby属性,因为是公共成员,所以它们可以和原先定意在类中的特权成员进行互相访问。因为公共成员可以互相访问。对上述代码做些修改。如下。

var younglady = new Lady(); Lady.prototype.Hobby = "上网"; Lady.prototype.GetName = function() { return this.Name; }; alert(younglady.GetName()); alert(younglady.Hobby);

先创建出Lady对象,再修改类成员,先前创建好的对象也具有了新的成员。这就是prototype做为类原型所带来的好处,这里简单理解,可以认为prototype是类对象的模版,模版的修改会影响到所有该类对象。

在添加普通成员的时候也可以来个批量的添加,直接用一个新的JSON对象来赋给prototype就可以了。但是要注意,现在是将原先的prototype进行了替换,在替换之前创建的对象引用的是旧的prototype对象,所以对prototype替换之前创建的对象不会有Hobby和GetName成员。

Lady.prototype = { Hobby: "上网", GetName: function() { return this.Name; } }; var younglady = new Lady(); alert(younglady.GetName()); alert(younglady.Hobby);

除了在构建类时可以添加公共成员,还可以对对象直接进行成员操作。这在本小系列第二篇文章里有描述。这里做一下补充,对对象直接添加的成员,也是一种公共成员,这些成员也可以和类中原先具有的公共成员进行访问。

younglady.SetName = function(name) { this.Name = name; }; younglady.SetName("菜明"); alert(younglady.GetName());

以上说了一下类成员的东西,下次再说说类继承相关的东西。(如有不当说法请指正)

推荐整理分享javascript 面向对象编程 function也是类(javascript面向对象精要pdf),希望有所帮助,仅作参考,欢迎阅读内容。

javascript 面向对象编程 function也是类(javascript面向对象精要pdf)

文章相关热门搜索词:javascript面向对象编程 PDF,javascript面向对象编程指南 pdf,javascript面向对象吗,javascript面向对象编程指南,javascript面向对象吗,javascript面向对象编程指南第三版,javascript面向对象编程指南,javascript面向对象吗,内容如对您有帮助,希望把文章链接给更多的朋友!

javascript 面向对象编程 万物皆对象 javascript和java、C#等语言一样也具有面向对象的一些特征,但细比较的时候,会发现这些特征并不是真正的面向对象,很多地方都是利用对象本身来模拟

javascript 面向对象编程 聊聊对象的事 先看一下JSON(javascriptobjectnotation)对象,JSON是一种脚本操作时常用的数据交换格式对象,相对于XML来说JSON是一种比较轻量级的格式,在一些intelligence的IDE

javascript 面向对象编程 function是方法(函数) 好程序不是写给computer的,而是写给human的。遇到复杂功能,应该想着把它简化、组件化,把小功能封装成小组件,小功能块可以任意的组合得到千变万

标签: javascript面向对象精要pdf

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

上一篇:javascript类继承机制的原理分析(js 类继承)

下一篇:javascript 面向对象编程 万物皆对象(javascript面向对象编程指南第三版)

  • 税务会计常用会计科目
  • 资产负债表其他应付款包括哪些
  • 社保可以抵扣什么税
  • 企业所得税成本没有发票怎么处理
  • 专票当普票用,发票勾选怎么操作
  • 新会计准则 预付房租怎么做账
  • 兼职工资直接入公司账户
  • 即将发生坏事的预兆
  • 保本销售量的计算公式用安全边际率
  • 个人转让房产涉税政策
  • 个人以房产进行交易
  • 企业赞助学校发言稿
  • 融资租入固定资产
  • 确认的投资收益
  • 季节性停工算作固定资产停止使用吗?
  • 公司与个人合伙协议
  • 稿酬所得的个税计算
  • 基金公司收到投资者的投资款
  • 建筑企业存款账户
  • 稽查补缴增值税怎样做账
  • window10主题的颜色浅了
  • 内部控制的类型有哪些
  • 总资产报酬率怎么查
  • 社保买房公积金
  • 职工廉租房怎么办理
  • 对公收到别人的转账怎么记账
  • 建筑公司能否开材料票
  • 印花税计税依据及计算方式
  • 收到违约金如何入账
  • 外国政府贷款利息是否征收增值税
  • 怎么安装vue环境
  • php模糊查询txt文本
  • 用友的应付单和付款单的区别各是什么时候填制
  • 餐饮专用发票可抵扣吗
  • npm ERR! notarget No matching version found for xxx@^1.0.64. npm 插件安装失败
  • web攻防之业务安全实战指南在线阅读
  • 谷歌研究院
  • Js模板字符串添加点击事件
  • 论文implications
  • 深入理解php
  • 商贸公司用什么名字最好
  • 转账支票购买办公用品一批,共计600元
  • 增值税留抵税额退税政策
  • 苗木可以进项抵扣的么
  • 固定资产的特点不包括
  • 内账增值税怎么计提
  • 新购固定资产怎么填写申报表
  • 要求供应商赔偿说明函范本
  • mac安装mysql8.0
  • 准则对()、()和()等作出基本规定
  • 其他应付款在清算时怎么处理
  • 房地产小规模纳税人预缴税款如何填申报表
  • 关于SQL Server 2019文件组的叙述正确的是
  • 专项应付款转资本公积需要缴纳所得税
  • 期末结转会计分录总结
  • 单位食堂不对外营业需不需要办理经营许可证
  • 企业促销费用项目有哪些
  • 拆迁补偿款收税吗
  • 施工仪器的主要类别
  • 向投资者发放现金红利
  • 跨年度发票的报表怎么填
  • 货物赔偿款计入什么会计科目
  • 所有进项增值税怎么申报
  • 营改增后不动产发票怎么开
  • 支付给个人的劳务费需要发票吗
  • 食堂没发票如何记账
  • 通过T_sql语句向其中一次填入一条数据或一次填入多条数据的方式填充数据
  • Win10 Mobile 14393.321终于修复Lumia636/638导航栏遮挡
  • ubuntu不支持设置属性
  • securecrt教程
  • linux vmware命令行
  • JavaScript运算符中谁拥有最高优先级
  • 模块化开发app
  • Highcharts+NodeJS搭建数据可视化平台示例
  • 使用多进程web
  • js模块化开发教程
  • onSaveInstanceState和onRestoreInstanceState触发的时机
  • 用python写脚本
  • jquery中的each方法
  • 车辆登记指的是什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设